我使用BottomSHeetDialogfragment创建了一个底表,在按下保存按钮后,我的底单上有两个文本框和一个名为保存按钮的按钮,我的数据成功插入到sqlite数据库后,我的主活动上有一个列表视图,当按下保存按钮时,数据成功插入数据库,但列表视图没有自动更新插入的值。
现在,我如何自动更新我的列表视图?
我的适配器类是...
public class MainListViewAdapter extends BaseAdapter {
Context context;
ArrayList<String> taskList;
ArrayList<String> detailList;
LayoutInflater layoutInflater;
public MainListViewAdapter(Context context, ArrayList<String> taskList, ArrayList<String> detailList) {
this.context = context;
this.taskList = taskList;
this.detailList = detailList;
}
@Override
public int getCount() {
return taskList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
if (convertView == null) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.main_activity_list_view, parent, false);
}
TextView tasktitleTv = convertView.findViewById(R.id.list_item_title_tv_id);
TextView taskDetailsTv = convertView.findViewById(R.id.list_item_detail_tv_id);
final CheckBox checkBox = convertView.findViewById(R.id.list_item_checkbox_id);
convertView.setClickable(true);
convertView.setFocusable(true);
convertView.setBackgroundResource(android.R.drawable.menuitem_background);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, ""+position, Toast.LENGTH_SHORT).show();
}
});
tasktitleTv.setText(taskList.get(position));
taskDetailsTv.setText(detailList.get(position));
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
Toast.makeText(context, "Checked", Toast.LENGTH_SHORT).show();
taskList.remove(position);
detailList.remove(position);
MainListViewAdapter.this.notifyDataSetChanged();
} else {
return;
}
if (isChecked) {
buttonView.toggle();
}
}
});
return convertView;
}
}
我的mainActivity.java类是
public class MainActivity extends AppCompatActivity {
private TextView taskHeaderTv;
public ListView mainListview;
private MainListViewAdapter mainListViewAdapter;
private FloatingActionButton floatingActionButton;
private BottomAppBar bottomAppBar;
private DataBaseHelper dataBaseHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
taskHeaderTv = findViewById(R.id.task_header_tv_id);
floatingActionButton = findViewById(R.id.floating_action_button);
bottomAppBar = findViewById(R.id.bottomAppBar);
fabClick();
bottomAppBarClick();
// set list view content
dataBaseHelper = new DataBaseHelper(this);
ArrayList<String> taskList = dataBaseHelper.getAllTitle();
ArrayList<String> detailList = dataBaseHelper.getALlDetails();
mainListview = findViewById(R.id.main_activity_listview_id);
mainListViewAdapter = new MainListViewAdapter(this, taskList, detailList);
mainListview.setAdapter(mainListViewAdapter);
mainListview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, position, Toast.LENGTH_SHORT).show();
}
});
mainListViewAdapter.notifyDataSetChanged();
}
}
我的片段类是
public class ListItemInputFragment extends BottomSheetDialogFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogStyle);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_list_item_input, container, false);
final EditText newTaskEt, detailsEt;
TextView savBtn;
newTaskEt = view.findViewById(R.id.new_task_et_id);
detailsEt = view.findViewById(R.id.details_et_id);
savBtn = view.findViewById(R.id.save_btn_id);
savBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String title = newTaskEt.getText().toString();
String detail = detailsEt.getText().toString();
DataBaseHelper dataBaseHelper = new DataBaseHelper(getContext());
long row = dataBaseHelper.insertData(title, detail);
if (row == -1) {
Toast.makeText(getActivity().getBaseContext(), "Data not inserted", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getActivity().getBaseContext(), "Data Inserted", Toast.LENGTH_SHORT).show();
}
dismiss();
}
});
return view;
}
}
发布于 2019-10-13 13:31:35
由于onCreate只被称为已经创建的MainActivity (而不是在取消底盾之后),所以您可以在onResume中更新您的列表,该列表是在取消底盾之后调用的。
MainActivity
@Override
protected void onResume() {
super.onResume();
mainListViewAdapter.taskList = dataBaseHelper.getAllTitle();
mainListViewAdapter.detailList = dataBaseHelper.getALlDetails();
mainListViewAdapter.notifyDataSetChanged();
}
但是,我真的建议你去看看Android架构组件和房间。(https://developer.android.com/topic/libraries/architecture) MVVM (模型-视图-视图模型)与使用LiveData使您的生活变得更容易。
https://stackoverflow.com/questions/58363676
复制