【问题标题】:How to refresh ListView in Android如何在 Android 中刷新 ListView
【发布时间】:2012-06-21 07:54:10
【问题描述】:

我知道你可以调用 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 和上面尝试了这段代码。就在对话框关闭之前。

【问题讨论】:

  • 您是否使用新插入的元素更新您的项目列表,然后尝试通知适配器?
  • 是的,我调用 HttpPost,运行脚本通过 PHP 将数据插入数据库。然后回到 Java 中,我尝试在完成后刷新列表视图。

标签: android listview android-listview listactivity


【解决方案1】:

你需要自己初始化ArrayAdapter

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

...然后致电notifyDataSetChanged()

adapter.notifyDataSetChanged();

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

【讨论】:

  • 我记得你的方法是我尝试的方式。但是,我已经用更多代码更新了我的问题,但它仍然无法正常工作。
  • 首先:试试getListView().setAdapter(...);。接下来,您确定商品列表已更新吗?使用items.length 验证这一点。在创建一个新的ArrayAdapter 并在其上调用setAdapter 之后,甚至不需要notifyDataSetChanged
  • 我不确定它是否更新了。我所做的就是在 ListView 从中提取的数据库中添加一个新行。然后我想刷新列表,让它再次拉出同一个(MySql)表。
  • 然后,将行添加到数据库后,检查items.length 是否增加。如果没有,您的数据不会被提取,因此它不会向ListView 添加任何内容。
  • 我知道这是一个迟到的问题,我确定我不会在添加数据后提取数据。所以我的问题是,我该怎么做?我虽然这就是 NotifyDataSetChanged 正在做的事情。
【解决方案2】:

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

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

在你的例子中,你会做这样的事情,假设你打算调用 listView.setListAdapter()

(ArrayAdapter)listView.getAdapter()).notifyDataSetChanged();

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 您好,感谢您的反馈。它实际上是一个成员变量。我将摆脱设置代码并留下通知。艰难,我相信我已经尝试过了。
    猜你喜欢
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 2016-04-22
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    相关资源
    最近更新 更多