我知道你可以调用notifyDataSetChanged();在这种情况下你会怎么做?它甚至可能吗?
ListView listView = getListView();
listView.setTextFilterEnabled(true);
setListAdapter(new ArrayAdapter<String>(Items.this, R.layout.list, items));
编辑:我已更改为以下建议之一。这就是我在做的事情:
protected void onPostExecute(Void v) {
adapter = new ArrayAdapter<String>(Items.this, R.layout.list, items);
setListAdapter(adapter);
adapter.notifyDataSetChanged();
}
这里我在AsyncTask方法中刷新。这是在Dialog中调用的,ListLiew顶部有一个Submit按钮。 Dialog将新数据插入到数据库中,我希望列表刷新到哪里来反映这一点。我已经尝试过上面的代码和在对话框中的按钮内的onClick。在对话被驳回之前。
答案 0 :(得分:0)
您需要自行初始化ArrayAdapter
:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(Items.this, R.layout.list, items);
setListAdapter(adapter);
...然后拨打notifyDataSetChanged()
:
adapter.notifyDataSetChanged();
请注意,如果数据实际发生变化,您只需要调用此方法;鉴于此,您可能需要将其作为成员变量存储在类中,以便以后可以访问它。
答案 1 :(得分:0)
您应该能够在ArrayAdapter上调用notifyDataSetChanged(),因为ArrayAdapter扩展了BaseAdapter
http://developer.android.com/reference/android/widget/ArrayAdapter.html
在你的例子中,你会做这样的事情,你打算调用listView.setListAdapter()
(ArrayAdapter)listView.getAdapter()).notifyDataSetChanged();
答案 2 :(得分:0)
在您的示例中,您不应该在AsyncTask
中设置适配器。通常,最好在onCreate()
中执行此操作,因为否则每次调用AsyncTask
时都会设置它。如果您将适配器设为成员变量,那么您应该可以在<adapter>.notifyDataSetChanged()
内调用AsyncTask
。