在我的主片段中,我有一个名为notesListView
的listView。 noteAdapter
填充notesListView
。当用户长时间点击其中一个notesListView
元素时,会出现一个对话框,询问用户是否确实要删除某个项目。如果他同意,那么该项目将从数据库中删除。如果没有 - 那么生活还在继续。
问题是我的Dialog是其他类(其他片段)。对于这个类,我也传递了我的database
对象和noteAdapter
对象,因此它可以从数据库中删除项目,然后通知noteAdapter
数据已更改。听起来不错,但它不起作用,我完全不知道为什么。请看看并帮助我。
这是mainFragment中的一个方法,它处理上面提到的listView:
public void handleNotes(final ListView notesListView){
if (database.getNoteCount() != 0) {
notesListView.setAdapter(noteAdapter);
notesListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
TextView textViewId = (TextView) view.findViewById(R.id.textViewId);
DeleteNoteFragment newFragment = new DeleteNoteFragment(database, noteAdapter, Integer.parseInt(textViewId.getText().toString()));
newFragment.show(getActivity().getSupportFragmentManager(), "deleteConfirmation");
return false;
}
});
}
}
如您所见,正在创建DeleteNoteFragment然后显示。 让我们看一下DeleteNoteFragment本身:
public class DeleteNoteFragment extends DialogFragment {
private Database database;
private NoteAdapter noteAdapter;
private int i;
public DeleteNoteFragment(Database database, NoteAdapter noteAdapter, int i) {
this.database = database;
this.noteAdapter = noteAdapter;
this.i = i;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.dialog_delete_note)
.setPositiveButton(R.string.dialog_delete_confirm, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
database.removeNote(i);
noteAdapter.notifyDataSetChanged();
Toast.makeText(getActivity(), "Note deleted successfully!", Toast.LENGTH_LONG).show();
}
})
.setNegativeButton(R.string.dialog_delete_denny, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
return builder.create();
}
}
也许你可以发现我犯错误的地方,或者有任何提示如何解决这个问题?
答案 0 :(得分:0)
您正在删除数据库中的数据,但不是在适配器中删除:
database.removeNote(i);
noteAdapter.notifyDataSetChanged();
在适配器中创建一个方法,以获取适配器中的列表。类似的东西:
database.removeNote(i);
noteAdapter.getListOfItems().remove(i);
noteAdapter.notifyDataSetChanged();
答案 1 :(得分:0)
notifyDataSetChanged
- &#34;通知附加的观察者基础数据已被更改,反映数据集的任何视图都应自行刷新。&#34;它不会从数据库重新加载数据。您仍然需要调用remove
方法从适配器中删除该项,然后调用notifyDataSetChanged