使用另一个片段中的数据更新一个片段中的listview

时间:2014-04-01 12:58:56

标签: android listview android-fragments android-listview

好的,所以我花了两天时间在这上面,我尝试了一切在阳光下和谷歌:L

基本上,如果我在服务器中添加或删除某些内容,我想从我的detailfragment更新我的listview,它位于mylistfragment中,以反映服务器上的更改。通过单击详细信息片段中的删除或添加按钮,可以进行更改。

我有一个回调方法,它包含了重新填充listview所需的一切,我似乎无法让listview更新。

非常感谢任何帮助。

我的回调代码如下:

  public final Handler myCallBackAll = new Handler() {
  @Override
     public void handleMessage(Message msg) {
       ListView lv = (ListView) view.findViewById(R.id.listView1);
   if (msg.obj == "No Response") {
     TextView tv2 = (TextView) view.findViewById(R.id.textView2);
     tv2.setText("No Response. Please check your internet connection");
     tv2.setVisibility(View.VISIBLE);
     lv.setVisibility(View.INVISIBLE);
  } else {
    Beer beers = new Beer();
    ArrayAdapter<Beer> arrayAdapter = new ArrayAdapter<Beer>(
    getActivity(), android.R.layout.simple_list_item_1,(List)msg.obj);
    lv.setAdapter(arrayAdapterNew);
    arrayAdapter.notifyDataSetChanged();
}
}
};

它不会抛出任何错误,只是不起作用

我的回调是如何调用的

if (isBound) {
 myBinder.getAllBeer(myCallBackAll);
}

这是我必须使用的有限服务,是项目的规定。所有这些代码都有效,只是mylistview不会更新

2 个答案:

答案 0 :(得分:1)

你说你已经设置了回调,所以我假设回调是相应的。如果是这种情况,请确保更新您在适配器中使用的数据源(数组,列表等),以反映您在detailfragment中所做的更改。

另外,请不要忘记每次添加,编辑,删除适配器数据源中的数据时,都必须调用mAdapter.notifyDataSetChanged()告诉适配器数据中的某些内容发生了变化。< / p>

修改

尝试以这种方式创建处理程序:public final Handler myCallBackAll = new Handler(Looper.getMainLooper())

notifyDataSetChanged()必须在主UI线程上执行。当您创建一个新的处理程序时,它将在自己的线程上执行,因此您需要确保它在UI线程上执行。请查看here了解更多信息

答案 1 :(得分:0)

终于想通了,可能不是最好的方法,但确实有效,我在我的主要活动中将我的列表视图声明为静态变量,然后在两个片段中引用这个变量并且它起作用:P