保存时更新列表视图
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 没有更新适配器正在使用的列表。
我有一个代码,可以将所有 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 没有更新适配器正在使用的列表。