2

我知道你可以调用 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 方法中刷新。这是在一个对话框中调用的,在 ListLiew 顶部有一个提交按钮。对话框将新数据插入数据库,我希望刷新列表以反映这一点。我已经在对话框中的按钮的 onClick 和上面尝试了这段代码。就在对话框关闭之前。

4

3 回答 3

0

您需要ArrayAdapter自行初始化:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(Items.this, R.layout.list, items);
setListAdapter(adapter);

...然后调用notifyDataSetChanged()它:

adapter.notifyDataSetChanged();

注意,只有在数据实际发生变化时才需要调用该方法;鉴于此,您可能需要将其作为成员变量存储在类中,以便以后可以访问它。

于 2012-06-20T23:17:40.723 回答
0

您应该能够在 ArrayAdapter 上调用 notifyDataSetChanged(),因为 ArrayAdapter 扩展了 BaseAdapter

http://developer.android.com/reference/android/widget/ArrayAdapter.html

在您的示例中,您将执行类似的操作,假设您打算调用 listView.setListAdapter()

(ArrayAdapter)listView.getAdapter()).notifyDataSetChanged();
于 2012-06-20T23:20:38.803 回答
0

在您的示例中,您不应该在AsyncTask. 一般来说,这样做是个好主意,onCreate()因为否则每次AsyncTask调用时你都要设置它。如果您使您的适配器成为成员变量,那么您应该能够<adapter>.notifyDataSetChanged()AsyncTask.

于 2012-06-20T23:54:10.870 回答