更新列表视图保存

时间:2015-07-01 17:43:38

标签: android listview sugarorm

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

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

2 个答案:

答案 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中。