0

所以,在 a 中有一个按钮ListFragmentonCLick按钮的 方法在中实现MainActivity(不确定是否是正确的解决方案,但就是这样)。当我单击按钮时,会AlertDialog弹出,当我选择其中一个对话框选项时,它会更改我的片段正在使用的数据集。

问题是当AlertDialog消失时,我ListFragment仍在显示旧数据。

有什么办法可以更新我ListFragmentMainActivity

我尝试将某些ListFragment方法设为静态,以便可以从主活动中调用它们,但这些方法使用非静态字段等,因此不能是静态的。

4

4 回答 4

1

您应该能够通过调用notifyDataSetChanged()它的适配器来更新 ListFragments(假设您的适配器派生自BaseAdapter它的任何子类或任何子类)。最简单的方法可能是DialogInterface.OnDismissListener在您的对话框上设置一个。

myDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
  @Override
  public void onDismiss(DialogInterface dialog){
    myBaseAdapter.notifyDataSetChanged();
  }
});

您可以保留对适配器的引用,也可以直接从ListFragment您的实现中获取它。

于 2012-08-15T19:23:54.347 回答
1

因此,我将我的ListFragment片段的适配器声明为静态的,并且我声明了一个正在填充该适配器的列表 - 作为静态的。

从主要活动我这样做:

ListFragment.item.add(mChosenFilePath);
ListFragment.fileList.notifyDataSetChanged();

在哪里:

item- 是一个列表,其中包含要显示的元素

mChosenFilePathitem-作为对话框的结果添加到的文件的路径

fileList- 是我的适配器

于 2012-08-16T16:34:15.447 回答
0

有三种可能的解决方案。

  1. 聆听片段而不是活动中的点击。
  2. cancel在对话框的按钮上设置一个监听器,并根据需要重新加载片段。
  3. 添加带有标签的片段,通过该标签从管理器中获取它,然后调用适当的方法。
于 2012-08-15T19:04:01.420 回答
0

为片段设置标签或 id。然后,您可以直接在 Activity 的片段上调用方法:

Fragment myne = findFragmentByTag( "MyFragment" );
MyFragment target = (MyFragment) myne;
target.refresh(); // 'Refresh' method to be declared by MyFragment implementation
于 2012-08-15T19:09:43.947 回答