【问题标题】:How to refresh two listview at one moment in Android?如何在Android中一次刷新两个列表视图?
【发布时间】:2015-09-10 08:53:16
【问题描述】:

我有两个列表视图,例如 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中同时刷新两个listview?


还有什么代码:

//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);
}

upside sn-p的真正代码是:

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
  • @Fabi775 是的,你说得对,我忘记改了。
  • 是的,没问题。您问题的底部是一个编辑按钮。
  • @Fabi755 感谢您的友好回复。 ^_^
  • @Fabi755 是的,它成功了!我在updateCurPos ()中更改了datalistview_2的绑定),然后notifyDataSetChanged()工作了!我无法解释为什么listview_1 可以使用相同的代码刷新而listview_2 不能。不管我多么高兴,我终于解决了这个问题。^_^

标签: android listview refresh


【解决方案1】:

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

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

【讨论】:

  • 是的,我确实这样做了。我认为这不是我无法刷新第二个列表视图的主要原因。
  • 它能解决你的问题吗?如果没有,请发布更多代码,
  • 如果它不起作用,我们至少需要知道你在哪里调用了这个函数。
  • @programmer23 故事有点长。我现在编辑了我的问题,添加了更多代码。而且我可以保证我展示的方法已经运行。
【解决方案2】:

您的代码的问题似乎是您调用了getAdapter()

设置此 ListView 后面的数据。传递给此方法的适配器可能由 WrapperListAdapter 包装,具体取决于当前使用的 ListView 功能。例如,添加页眉和/或页脚将导致适配器被包装。

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

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

查看更多关于这个问题的答案:https://stackoverflow.com/a/31893525/2742759

【讨论】:

  • 这个问题看起来和我的很相似,我希望答案也对我有用。但遗憾的是没有。事实上,我已经让我的列表视图和我的列表适配器成为我班级的成员。你可以看到我添加了什么代码。
  • 抱歉。是的,你是对的,我只看到了第一个代码 sn-p。
猜你喜欢
  • 1970-01-01
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2011-08-31
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多