如何在Android中刷新ListView

时间:2012-06-20 23:12:57

标签: android listview android-listview listactivity

我知道你可以调用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。在对话被驳回之前。

3 个答案:

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