Android,用户删除项后用适配器刷新listview

时间:2016-06-03 12:02:00

标签: android listview android-adapter

我知道有很多类似的问题。但是,我尝试了所有这些,没有任何帮助我。

因此,我有任务列表。我将任务存储在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);

然而,对我来说,它看起来真的很糟糕。 也许我错了?如果没有,最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

同样从列表中删除项目,不要再次启动适配器。

list.remove(task);
((TaskListAdapter)listView.getAdapter()).notifyDataSetChanged();