从当前片段更新以前的片段
问题描述:
我有两个片段叫做fragmentA和FragmentB。我可以通过添加FragmentA来反向堆栈从FragmentA导航到FragmentB。然后,我在FragmentB上做了一些工作,并根据FragmentB上所做的更改,当按回退按钮返回FragmentA时,应更新FragmentA。无论如何要实现这种情况?从当前片段更新以前的片段
答
你可以用你想在FragmentA以更新活动,然后得到的数据fragmentA中的onResumeØ东西
//method in activity with the data to set
public void setData(recieve data to be set)
{
//data you want to show in FragmentA;
}
从fragmentB使用setData数据创建一个方法
((MainActivity)getActivity()).setData(send some data);
创建在Activity中给出更多的方法,它给你你设置的数据 然后从fragmentA getData()
((MainActivity)getActivity()).getData(send some data);
答
您可以使用LocalBroadcastManager
。在Fragment
的附件和分离器上注册,您需要像下面的代码那样更新。
@Override
public void onAttach(Context context) {
super.onAttach(context);
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
_onProfileUpdate,
new IntentFilter(UserDefault.broadcastProfileUpdate));
}
@Override
public void onDetach() {
super.onDetach();
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(
_onProfileUpdate);
}
在你的片段创建手柄..
private BroadcastReceiver _onProfileUpdate = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
setUpBasicInfo();
}
};
每当需要更新片段,只是从另一个片段调用监听器。您也可以通过意图传递所需的参数。
Intent in = new Intent(UserDefault.broadcastProfileUpdate);
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(in);
这里,UserDefault.broadcastProfileUpdate
是一些静态字符串或让说键。
编码您的更新功能,并在片段A的OnResume中调用它。请在调用函数之前检查您是否来自Fragment B,因为onResume也会在其他情况下调用。 –