子Tomment上的Android OnResume没有调用

时间:2016-09-16 08:44:57

标签: android android-fragments illegalstateexception onresume

我在我的项目中使用滑动菜单,所有侧面菜单都是片段 我的主片段有两个片段也是片段。 (片段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)

2 个答案:

答案 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()

即可