【问题标题】:Android refresh listview adapter from another activityAndroid 从另一个活动刷新列表视图适配器
【发布时间】:2012-02-24 08:56:21
【问题描述】:

我用谷歌搜索了很多,但找不到正确的答案。

我有两个活动。每个活动“都有”一个 listview

每个列表视图都有一个自定义 ArrayAdapter。所以:

Activity 1 ----> Listview 1 ------> 自定义ArrayAdapter 1

Activity 2 ----> Listview 2 ------> 自定义ArrayAdapter 2

当我按下 Activity 1 中的按钮时,它会刷新 Listview 1(它是适配器)。

目标是:那时我也必须刷新 Listview 2。我怎样才能做到这一点?我读过一些关于广播的东西,但不是很了解。

谢谢!

【问题讨论】:

  • 适配器中有什么类型的内容?我猜他们分享内容。如果您在适配器之间共享内容,则可能只是通知 Waqas 所说的更改。查看我对stackoverflow.com/questions/9333790/… 的回答本质上,您不应从其他活动中引用实际的适配器,因为它会导致紧密耦合和潜在的数据泄漏。
  • 谢谢。我已经阅读了你的答案。非常棒,但现在我只是在学习 Android 编程,所以现在 Waqas 的方式对我来说已经足够了。谢谢!

标签: android listview adapter


【解决方案1】:

如果你在Activity1,尝试刷新Activity2的listview是没有用的,因为它是不可见的。但是,您可以做的是,当用户切换到 Activity2 时,只需在其 onResume() 方法和您的 Activity2 中调用适配器的 notifyDataSetChanged() strong> 将被刷新。

【讨论】:

  • 我认为这不是最合适的方式,但是谢谢,在这种情况下对我来说已经足够了。
【解决方案2】:

在每个活动中添加 listView 作为全局变量并使其成为公共静态。

然后,在需要时调用它。

例如在activity1中,调用如下让activity2中的列表刷新

if(SecondActivity.listView != null)

    ((ArrayAdapter)SecondActivity.listView.getAdapter()).notifyDataSetInvalidated();

【讨论】:

  • 除非您也将列表视图设为静态,否则它不可编译。这样做可能会导致内存泄漏。
  • 是的,但有时用户需要在后台接收器上刷新列表。将列表设为公开和静态是更容易控制它的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
相关资源
最近更新 更多