0

我有一个代码,我将所有 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();
}

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

4

2 回答 2

1

查看您的代码后,我最好的猜测是在调用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 没有更新适配器正在使用的列表。

于 2015-07-01T17:56:15.323 回答
0

当您创建适配器时,它由您创建的列表支持 TODO.listAll(TODO.class)

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

于 2015-07-01T17:49:50.543 回答