如何在Android中同时刷新两个listview?

How to refresh two listview at one moment in Android?

我有两个列表视图,例如 listview_1listview_2。我想在 listview_1 刷​​新时刷新 listview_2

我的代码是这样的:

public void updateTwoListView() {
    listview_1.getAdapter().notifyDataSetChanged();
    listview_2.getAdapter().notifyDataSetChanged();
}

但是不行,listview_1可以刷新但是listview_2不能。

那一刻我发现 listview_1 很专注。

然后我尝试在运行方法之前将焦点设置到其他视图,它们都没有刷新。它喜欢仅在列表视图具有焦点时刷新列表视图。

另外我发现我调用方法刷新的时候,listview_2没有,然后我设置焦点到listview_2,自己刷新了!

所以,我想问的是:

如何在Android中同时刷新两个列表视图?


还有什么代码:

//init two listview there
public void init() {
    listview_1 = (ListView)findViewById(R.id.listView1);
    listview_2 = (ListView)findViewById(R.id.listView2);

    adapter1 = new MyListViewAdapter(mContext);
    adapter2 = new MyListViewAdapter(mContext); //I have tried use different adapter, that also didn't work.

    listview_1.setAdapter(adapter1);
    listView_2.setAdapter(adapter2);
}

上行代码段的真实代码是:

public void updateTwoListView(int currentPosition) {
    adapter1.updateCurPos(currentPosition);
    adapter2.updateCurPos(currentPosition);
}

并在 MyListViewAdapter.java 中:

public void updateCurPos(int currentPosition) {
    mCurrentPos = currentPosition;
    notifyDataSetChanged();
}

我会在外面调用listViewManager.updateTwoListView(1)这样的方法来刷新。


如有任何回复,我们将不胜感激。

您已致电 listview_1 两次。只需将其中之一更改为 listview_2,如下所示:

public void updateTwoListView() {
    listview_1.getAdapter().notifyDataSetChanged();
    listview_2.getAdapter().notifyDataSetChanged();
}

看来你代码的问题是你调用了getAdapter().

Sets the data behind this ListView. The adapter passed to this method may be wrapped by a WrapperListAdapter, depending on the ListView features currently in use. For instance, adding headers and/or footers will cause the adapter to be wrapped.

来源:http://developer.android.com/reference/android/widget/ListView.html#setAdapter(android.widget.ListAdapter)

解决方案是将 Adapter 保存为 activity 中的成员变量,然后从那里调用 notifyDataSetChanged()

查看更多关于这个问题的答案: