我有一个代码,我将所有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();
}
但是我的列表视图没有更新...我错过了什么?
答案 0 :(得分: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没有更新适配器正在使用的列表。
答案 1 :(得分:0)
创建适配器时,它由List支持,由TODO.listAll(TODO.class)创建
在调用adapter.notifyDataSetChanged()之前,必须确保将新项插入此List中。