FragmentTransaction .attach and .detach for Actionbar tabs

前端 未结 3 1066
后悔当初
后悔当初 2020-12-15 10:38

I\'m trying to get the code here to work. It compiles fine. It will run. And it will load tab 1 (of 3). However, when I click on the 2nd or 3rd tab, I get this:

相关标签:
3条回答
  • 2020-12-15 10:43

    or just use http://actionbarsherlock.com/ you will have consistent action bar experience from 2.x up

    0 讨论(0)
  • 2020-12-15 10:47

    if you are using the FragmentTransaction in API 4+ compatablity package -android.support.v4.app.FragmentTransaction - you should be able to call attach and detach methods on pre API level 13 platforms.

    http://developer.android.com/resources/samples/Support4Demos/index.html

    0 讨论(0)
  • 2020-12-15 11:01

    It appears that replacing the several places in the code that reference attach and detach with add and remove will allow the code to function normally in a pre-API Level 13 environment.

        public TabListener(Activity activity, String tag, Class<T> clz, Bundle args) {
            mActivity = activity;
            mTag = tag;
            mClass = clz;
            mArgs = args;
    
            // Check to see if we already have a fragment for this tab, probably
            // from a previously saved state.  If so, deactivate it, because our
            // initial state is that a tab isn't shown.
            mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);
            if (mFragment != null) { // && !mFragment.isDetached()) {
                FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();
                //ft.detach(mFragment);
                ft.remove(mFragment);
                ft.commit();
            }
        }
    
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            //if (mFragment == null) {
                mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
                ft.add(android.R.id.content, mFragment, mTag);
            //} else {
            //    ft.attach(mFragment);
            //}
        }
    
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            if (mFragment != null) {
                //ft.detach(mFragment); //requires API 13
                ft.remove(mFragment); //this does not do the same thing as detach
            }
        }
    
    0 讨论(0)
提交回复
热议问题