【问题标题】:Updating ListView fragment when not focused未聚焦时更新 ListView 片段
【发布时间】:2012-12-03 17:09:43
【问题描述】:

我正在开发一个平板电脑应用程序,左侧有一个 ListView 片段,右侧有一些其他视图,包括 SearchView(本质上是一个 TextView)。当 SearchView 聚焦时,我想更新 listview 的数据,但我不能。如果我在 UI 线程上 notifyDataSetChanged,则不会发生任何事情。如果我在列表视图上再次调用 setAdapter(),列表视图将变为空白。

只有当我再次触摸列表视图(它再次获得临时焦点或导致 getView() 在适配器上被调用)时,它才会更新。

有人知道如何解决这个问题吗?

Min-Sdk 和 Target 是 4.0.3。

【问题讨论】:

  • 你在布局文件中使用SearchView
  • 是的,片段的布局 XML。
  • 您使用什么来填充列表?某种装载机?
  • 不,只是手动填充一个 BaseAdapter 开始,然后修改该适配器中的项目。非常基本的东西真的......
  • 如果您认为它的焦点问题,那么您可以在调用 notifysetDataChanged() 之前调用 listview.requestFocus()

标签: java android android-fragments android-listfragment


【解决方案1】:

您是否尝试使用 runOnUiThread() 调用您的 refresh 例程?

修改您的对象列表,绑定到适配器的新实例,然后在刷新例程中再次调用notifyDataSetChanged()setAdapter()

【讨论】:

  • 不幸的是,在提出问题之前我已经尝试了所有这些。但是,现在一切似乎都正常了。
【解决方案2】:

我认为您必须使用 ViewHolder 来处理 ListView 中的更新。

【讨论】:

  • 我已经在底层适配器的 getView() 中使用了 ViewHolder,如果这就是你的意思的话。
【解决方案3】:

现在对我有用的是更新底层适配器中的数据,然后在该适配器上调用 notifyDataSetChanged,这一切都来自 UI 线程。

我不需要在 listView 上再次调用 setAdapter

当然,在问这个问题之前我已经尝试了所有这些,所以不确定是什么让它突然开始工作。

【讨论】:

    【解决方案4】:

    在 runOnUiThread 方法中调用它。还将新对象添加到其中的适配器。

    这样:

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            chatListAdapter.add(message);
            chatListAdapter.notifyDataSetChanged();
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      相关资源
      最近更新 更多