保存时更新列表视图

update listview on save

我有一个代码,可以将所有 TODO 添加到适配器,就像这样

 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_todo);

     adapter = new TODOAdapter(this, TODO.listAll(TODO.class));
     listView = (ListView) findViewById(R.id.listView);
     listView.setAdapter(adapter);
    }

当我添加新的 TODO 时,我这样做

private void createTodo(String s) {
    TODOWorker.createTodo(s);
    adapter.notifyDataSetChanged();
    Toast.makeText(getApplicationContext(), "Your TODO was saved!", Toast.LENGTH_LONG).show();
}

但是我的列表视图没有更新...我错过了什么?

当您创建 Adapter 时,它由您创建的 List 提供支持 TODO.listAll(TODO.class)

您必须确保在调用 adapter.notifyDataSetChanged() 之前将新项目插入此列表。

在查看您的代码后,我的最佳猜测是在调用适配器上的 notifyDatasetChanged() 之前,您需要在适配器上设置新列表。因此,当创建新的 TODO 时,将其添加到列表中并更新适配器正在使用的列表。然后调用 notifyDatasetChanged()

所以假设你的适配器有一个 List<TODO> mDataList 那么你需要有一个像这样的函数

public void setData(List<TODO> updatedList) {
    mDataList = new ArrayList<>(updatedList);
    notifyDataSetChanged();
}

并将您的 createToDo() 更改为此

private void createToDo(String s) {
    TODOWorker.createTodo(s);
    adapter.setData(TODO.listAll(TODO.class));
    Toast.makeText(getApplicationContext(), "Your TODO was saved!", Toast.LENGTH_LONG).show();
}

希望这对您有所帮助。我当然假设您的 TODOWorker 没有更新适配器正在使用的列表。