【问题标题】:How to refresh the listview content in timely manner如何及时刷新listview内容
【发布时间】:2014-06-12 21:14:34
【问题描述】:

您好我想及时刷新列表视图,这里我不添加/删除任何行。我想刷新是因为要连续刷新现有数据。

我正在这样做,但这对我不起作用。

// Update the Message on the screen to help for troubleshooting.
private void updateListView() {
    // Callback to update the message in a second.
    new CountDownTimer(30000, 1000) {

        @Override
        public void onTick(long arg0) {
            adapter.notifyDataSetChanged();
            listView.invalidateViews();
            listView.refreshDrawableState();
        }

        @Override
        public void onFinish() {

        }
    }.start();
}

【问题讨论】:

  • 数据是应该改变的行吗?
  • 您使用的 DatasSet 是什么?你能显示适配器的 getView() 吗?
  • @vjdhama 没有新行插入/删除,只更新现有行
  • 参考这个链接。 [链接][1][1]:stackoverflow.com/questions/10032003/…你能显示更多代码吗?

标签: android android-listview


【解决方案1】:

只需使用处理程序和 notifyDataSetChanged:

    final Handler handler = new Handler();
    final int REFRESH_EVERY_X_MS = 1000;
    handler.postDelayed(new Runnable() {

        @Override
        public void run() {
            mAdapter.notifyDataSetChanged();
            handler.postDelayed(this, REFRESH_EVERY_X_MS);
        }
    }, REFRESH_EVERY_X_MS);

如果您希望停止(并且应该),请使用 handler.removeCallbacks 并设置与参数完全相同的可运行对象。

【讨论】:

  • 这是否适用于我的情况,因为我没有从数据集中插入/删除行,只更新现有行中的数据?
  • 处理程序也可以在 UI 线程上工作,所以没关系。只要记住在不再需要时停止刷新即可。
  • 不,不工作,现有行没有更新,这里我不是插入/删除行,只想更新现有行
  • 好吧,除非您的适配器有问题,否则这段代码应该可以正常工作。如果您是 listView 的新手,我强烈建议您观看“listView 的世界”讲座。它已经很老了,但它仍然是最好的讲座之一。
  • 在此处更改数据适配器时刷新列表视图有效我没有添加/删除数据,因此适配器中没有更改,因此您的代码无法正常工作
猜你喜欢
  • 2011-06-21
  • 1970-01-01
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 2019-02-05
  • 2016-02-21
  • 2021-05-04
相关资源
最近更新 更多