我需要的是一个特定片段的onResume
方法(因为它适用于活动)。我正在将片段(假设片段A)添加到后台堆栈,并从片段A打开另一个片段(片段B)(再次添加到后台堆栈)。我想在片段B关闭且片段A是时更新工具栏再次在屏幕上。我希望onCreateView
被调用但是当我弹出片段B时它没有被调用。我也尝试将OnBackStackChangedListener
添加到片段A但是当后栈改变时我无法跟踪屏幕上的哪个片段
所以我的问题是当我回到片段A时如何调用onCreateView
。如果这不是一个好习惯,我还能如何跟踪这个事件?
修改
我正在使用此代码显示新片段:
getSupportFragmentManager().beginTransaction()
.add(R.id.content, fragment)
.addToBackStack(tag)
.commit();
我应该以某种方式更改它以使onCreateView
被调用吗?因为我在现有片段A上添加了新的片段B (当我在屏幕上时,我甚至可以点击片段A中的按钮),当我弹出片段B时,片段没有任何变化A的情况。
答案 0 :(得分:1)
在Fragment中覆盖此方法并检查布尔值
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
//Log.e("setUserVisibleHint", "isVisibleToUser " + isVisibleToUser);
}
根据isVisibleToUser布尔值
,只要片段在此方法中可见/隐藏,就需要执行您需要执行的代码答案 1 :(得分:0)
您是否以这种方式尝试OnBackStackChangedListener?
public class BlankFragment2 extends Fragment {
public BlankFragment2() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
if(getFragmentManager()==null)
return;
Fragment fr = getFragmentManager().findFragmentById(R.id.container)//id of your container;
if (fr instanceof BlankFragment2) {
//On resume code goes here
}
}
});
return inflater.inflate(R.layout.fragment_blank_fragment2, container, false);
}
}
答案 2 :(得分:0)
我希望这个解决方案有效。
1)在您的活动
上填写/调用 addOnBackStackChangedListenergetSupportFragmentManager().addOnBackStackChangedListener(backStacklistener);
2)在您的活动
中定义 backStacklistenerFragmentManager.OnBackStackChangedListener backStacklistener = new FragmentManager.OnBackStackChangedListener() {
public void onBackStackChanged() {
FragmentManager manager = getSupportFragmentManager();
if (manager != null) {
Fragment fragment = manager.findFragmentById(R.id.fragment);
if(fragment instanceof OutboxFragment) {
OutboxFragment currFrag = (OutboxFragment) fragment;
currFrag.onFragmentResume();
}
}
}
};
3)在片段上提供您想要触发的方法。在这种情况下,我创建名为 onFragmentResume()
的方法public void onFragmentResume() {
MainActivity activity = (MainActivity) getActivity();
activity.showFab();
// or do another thing here
}
祝你好运!