我在我的项目中使用滑动菜单,所有侧面菜单都是片段
我的主片段有两个片段也是片段。 (片段A有两个子片段作为制表符;片段B和C)。每当我从其他片段回到homefragment时,片段A的OnResume()
就会被调用。如何调用FragmentB的onResume()
,它是FragmentA的一个孩子?
我想在加载homefragment时刷新FragmentB中的视图,我认为唯一的选择是OnResume()
。
我尝试在homefragment的refreshFragment()
中调用onResume()
方法(即fragmentA),但是它会抛出错误,说片段没有附加到活动中。
FragemntA的onResume()代码
@Override
public void onResume() {
super.onResume();
mTabHost.setCurrentTab(mTabHost.getCurrentTab());
boolean settingschanged = sharedPrefrences.getBoolean(Constants.CHECK_CHANGE, false);
int unit = sharedPrefrences.getInt(Constants.DIMENSION_UNIT, 0);
SharedPreferences.Editor editor = sharedPrefrences.edit();
switch (mTabHost.getCurrentTab()) {
case 0:
((Outer) mFragments.get(0)).refreshView(unit);
((Outer) mFragments.get(0)).refreshFragment(settingschanged);
editor.putInt(Constants.DIMENSION_UNIT, unit);
editor.commit();
break;
case 1:
((Inner) mFragments.get(1)).refreshView(unit);
editor.putInt(Constants.DIMENSION_UNIT, unit);
editor.commit();
break;
default:
((Outer) mFragments.get(0)).refreshView(unit);
editor.putInt(Constants.DIMENSION_UNIT, unit);
editor.commit();
}
}
下面是崩溃:
09-16 14:13:34.608: E/AndroidRuntime(5758): java.lang.IllegalStateException: Fragment Outer{d34ce61} not attached to Activity
09-16 14:13:34.608: E/AndroidRuntime(5758): at android.support.v4.app.Fragment.getResources(Fragment.java:639)
答案 0 :(得分:0)
你可以使用这种方法,它可以帮助我很多次。基本上这取决于你的要求
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
}
答案 1 :(得分:0)
我确信这不是唯一/最好的方法。但这应该解决问题,就像它对我做的那样。
请在FragmentCanali和FragmentPreferiti Fragments中编写refresh()方法。
public class ListCanali extends Fragment implements OnPageChangeListener{
private MyAdapter mAdapter;
@Override
public View OnCreateView (...) {
...
if(mAdapter == null) {
mAdapter = new MyAdapter(getChildFragmentManager());
}
viewPager.setAdapter(mAdapter);
viewPager.setOnPageChangeListener(this);
...
}
...
@Override
public void OnPageSelected (int position) {
switch (position){
case 0 : ((FragmentCanali)adapter.getItem(position)).refresh();
case 1 : ((FragmentPreferiti)adapter.getItem(position)).refresh();
}
}}
如果从具有抽象refresh()方法的基础片段扩展这两个片段,它将更加清晰。
在onPageSelected()中,您只需拨打((BaseFragment)adapter.getItem(position)).refresh()