因此,ListFragment
中有一个按钮。按钮的onCLick
方法在MainActivity
中实现(不确定它是否是正确的解决方案,但它是什么)。当我单击按钮时弹出AlertDialog
,当我选择其中一个对话框选项时,它会更改我的片段正在使用的数据集。
问题是当AlertDialog
消失时,我的ListFragment
仍在显示旧数据。
有没有办法从ListFragment
更新我的MainActivity
?
我已尝试将某些ListFragment
方法设为静态,以便可以从主活动中调用它们,但这些方法使用非静态字段等,因此不能是静态的。
答案 0 :(得分:1)
您应该能够通过在其适配器上调用notifyDataSetChanged()
来更新ListFragments(假设您的适配器派生自BaseAdapter
或其任何子类)。最简单的方法可能是在对话框中设置DialogInterface.OnDismissListener
。
myDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog){
myBaseAdapter.notifyDataSetChanged();
}
});
您可以保留对适配器的引用,也可以直接从ListFragment
获取,具体取决于您的实现。
答案 1 :(得分:1)
所以,我将我的ListFragment
片段的适配器声明为静态,以及我声明了一个从中填充此适配器的列表 - 作为静态。
从主要活动我这样做:
ListFragment.item.add(mChosenFilePath);
ListFragment.fileList.notifyDataSetChanged();
其中:
item
- 是一个包含要显示的元素的列表
mChosenFilePath
- 作为对话结果添加到item
的文件路径
fileList
- 是我的适配器
答案 2 :(得分:0)
有三种可能的解决方案。
cancel
按钮上设置一个监听器,并根据需要重新加载该片段。答案 3 :(得分:0)
为片段设置标记或ID。然后,您可以直接在Activity:
上的片段上调用方法Fragment myne = findFragmentByTag( "MyFragment" );
MyFragment target = (MyFragment) myne;
target.refresh(); // 'Refresh' method to be declared by MyFragment implementation