Fragment第二次没有打开android

时间:2015-05-29 09:17:43

标签: android android-fragments

我在一个片段上有一个带有菜单HOME,SETTING,ABOUT US等的导航抽屉。只有HOME有一个滑动选项卡。在应用程序启动时,Home已打开,但在此之后,每当我再次单击home时,它会显示错误,说Home Fragment未附加到Activity。

我的代码如下

  

Drawer.java   这是mainAciticity

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    myDrawerLayout.closeDrawer(drawerBody);
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    Fragment fragment;
    switch (position){
        case 0:
                fragment = new Home();

                 fragmentTransaction.replace(R.id.main_content, fragment);

            break;
        case 1:
            fragment = new Settings();
            fragmentTransaction.replace(R.id.main_content, fragment);
            break;
        case 2:
            fragment = new Aboutus();
            fragmentTransaction.replace(R.id.main_content, fragment);
            break;
        case 3:
            fragment = new Help_and_Feedback();
            fragmentTransaction.replace(R.id.main_content, fragment);
            break;
        case 4:
            fragment = new Fill_up_form();
            fragmentTransaction.replace(R.id.main_content, fragment);
            break;
    }
    setTitle(position);
    fragmentTransaction.commit();


}
  

Home.java

public class Home extends Fragment implements ActionBar.TabListener {
ViewPager myViewPager;
ActionBar myActionBar;
MyFragmentPagerAdapter myFragmentPagerAdapter;
String[] selectedTabImage;
String[] unselectedTabImage;
String[] BloodGroups;



public Home() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.home, container, false);

    //Initialization
    myViewPager = (ViewPager) v.findViewById(R.id.viewpager);

    myFragmentPagerAdapter = new MyFragmentPagerAdapter(getActivity().getSupportFragmentManager());



    //viewpager work
    myViewPager.setAdapter(myFragmentPagerAdapter);

    myViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i2) {

        }

        @Override
        public void onPageSelected(int i) {
            myActionBar.setSelectedNavigationItem(i);
        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });

    myActionBar =((ActionBarActivity)getActivity()).getSupportActionBar();
    myActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    //get the array of images for tab
    selectedTabImage = getResources().getStringArray(R.array.tab_selected);
    unselectedTabImage = getResources().getStringArray(R.array.tab_unselected);

    BloodGroups = getResources().getStringArray(R.array.blood_groups);




    //Add Tabs
    for (int i = 0; i < myFragmentPagerAdapter.getCount(); i++) {
        String name = selectedTabImage[i];
        int tabId = getResources().getIdentifier(name,"drawable", getActivity().getPackageName());
        myActionBar.addTab(myActionBar.newTab().setIcon(tabId).setTabListener(this));

    }
    return v;

}


@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    int pos = tab.getPosition();
    myViewPager.setCurrentItem(pos);

    String name = selectedTabImage[pos];
    int tabId = getResources().getIdentifier(name,"drawable", getActivity().getPackageName());

    tab.setIcon(tabId);
}

@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    String name = selectedTabImage[tab.getPosition()];
    int tabId = getResources().getIdentifier(name,"drawable", getActivity().getPackageName());
    tab.setIcon(tabId);

}


@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {

}


public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {

        Fragment fragment = new DonarList();
        Bundle args = new Bundle();
        args.putInt("bloodGroupPosition", position);
        fragment.setArguments(args);
        return  fragment;
    }

    @Override
    public int getCount() {
        return 8;
    }
}


@Override
public void onStop() {
    super.onStop();

    myActionBar.setNavigationMode(0);

}

}

  

错误堆栈跟踪

05-29 14:44:31.961  12034-12034/com.example.p6.bloodies E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: Fragment Home{4120fd50} not attached to Activity
        at android.support.v4.app.Fragment.getResources(Fragment.java:619)
        at com.example.p6.bloodies.Home.onTabSelected(Home.java:114)
        at android.support.v7.internal.app.WindowDecorActionBar.selectTab(WindowDecorActionBar.java:634)
        at android.support.v7.internal.app.WindowDecorActionBar.setSelectedNavigationItem(WindowDecorActionBar.java:414)
        at android.support.v7.internal.app.WindowDecorActionBar.setNavigationMode(WindowDecorActionBar.java:1297)
        at com.example.p6.bloodies.Home.onCreateView(Home.java:72)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:454)
        at android.os.Handler.handleCallback(Handler.java:605)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4424)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
        at dalvik.system.NativeStart.main(Native Method)

第72行的代码

  

myActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

第114行的代码

  

int tabId = getActivity()。getResources()。getIdentifier(name,“drawable”,getActivity()。getPackageName());

2 个答案:

答案 0 :(得分:0)

不是很清楚,也看不到您的完整活动代码,但是当片段的代码运行时,您的活动可能仍在执行某些(后台)过程。尝试将代码移动到片段生命周期中的onActivityCreated(),然后将片段附加到活动。还可以检查代码中是否已添加片段,例如。

if(!isAdded()) {
    return;
}

答案 1 :(得分:0)

通过此方法删除当前片段可能会解决您的问题

public void removeFragment(Fragment fragment) {
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.remove(fragment);
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
    transaction.commit();
}