我知道有很多类似的问题。但是,我尝试了所有这些,没有任何帮助我。
因此,我有任务列表。我将任务存储在DB中。
这就是我在onCreate中所拥有的
taskDbHelper = new TaskDbHelper(getApplicationContext());
listView = (ListView) findViewById(R.id.listViewMainScreen);
final List<Task> list = taskDbHelper.getAllTasks();
taskListAdapter = new TaskListAdapter(this, list);
listView.setAdapter(taskListAdapter);
如果用户想删除我在onLongClickListener上执行的任务之一。
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener()
{
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id)
{
Task task = list.get(position);
showEditDialog(task);
taskListAdapter.notifyDataSetChanged();
return true;
}
});
在该用户看到对话框片段后,他可以确认或取消项目删除。
如果用户选择删除
taskDbHelper.deleteTask(getArguments().getString("task"));
MainScreen activity = (MainScreen) getActivity();
activity.onUpdate();
正如您在MainACtivity中所看到的,我将方法称为onUpdate
public void onUpdate()
{
taskListAdapter = new TaskListAdapter(this, taskDbHelper.getAllTasks());
((TaskListAdapter)listView.getAdapter()).notifyDataSetChanged();
}
它不起作用。我几乎尝试了所有东西,但只有当我添加到onUpdate
时它才有效listView.setAdapter(taskListAdapter);
然而,对我来说,它看起来真的很糟糕。 也许我错了?如果没有,最好的方法是什么?
答案 0 :(得分:1)
同样从列表中删除项目,不要再次启动适配器。
list.remove(task);
((TaskListAdapter)listView.getAdapter()).notifyDataSetChanged();