3

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

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

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

Min-Sdk 和 Target 是 4.0.3。

4

4 回答 4

4

您是否尝试使用 调用刷新例程runOnUiThread()

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

于 2012-12-12T09:40:51.997 回答
2

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

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

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

于 2012-12-12T10:35:35.890 回答
2

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

于 2012-12-12T07:11:09.437 回答
0

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

像那样:

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        chatListAdapter.add(message);
        chatListAdapter.notifyDataSetChanged();
    }
});
于 2013-11-12T22:00:37.007 回答