【问题标题】:How to repaint an android ListView without any data change?如何在不更改任何数据的情况下重新绘制 android ListView?
【发布时间】:2016-12-31 12:07:56
【问题描述】:

我遇到了一个小问题。 我的 MainActivity 有一个包含 ListView 的片段。 ListView 上显示了一些项目。单击一个项目后,将打开另一个活动。当我单击“UP”按钮并返回到 MainActivity 时,除了正在消失的 ListView 之外,一切都正常显示。 我意识到我需要触发 ListView 重绘。 但到目前为止,我只找到一种方法:

listAdapter.clear();
listAdapter.addAll(...);

这有点反直觉,因为 ListView 的内容没有改变,我只是想再次显示它们。 那么有人知道实现它的简单方法吗?

谢谢!

【问题讨论】:

  • 在活动上调用 onResume() 后,您是否检查过您的片段是否再次被调用并正确设置?
  • 受到您和@Shreyash S Samayak 建议的启发,我进行了更多调试,最后发现我的问题是由 MainActivity 的重新创建引起的。在调试过程中,我意识到在单击 DetailActivity 的“向上”按钮以返回 MainActivity 后,由于 android:launchMode 重新创建了 MainActivity。如果我使用“返回”按钮,它没有。我喜欢下面的堆栈溢出问题,它可以很好地解释这个问题。 stackoverflow.com/questions/22182888/…
  • @alex-liu 这是一本很棒的书 - developer.android.com/design/patterns/navigation.html

标签: android listview


【解决方案1】:

您可以通过这样做使其无效

adapter.notifyDataSetChanged()

【讨论】:

  • 我也试过这个。我在 MainActivity::onResume() 中调用了 listAdapter.notifyDataSetChanged() 但它没有生效。有什么问题吗?我不应该选择 onResume() 吗?谢谢!
  • @Alex.Liu 你能把MainActivity的其他部分放上去吗?比如创建ListView 和onResume() 代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 2015-10-27
相关资源
最近更新 更多