Search code examples
javaandroidactionbarsherlock

How to initially not selected any tab in actionbarsherlock?


I have successfully implemented actionsherlock in my project.so here is my code:

public class ActiontabActivity extends SherlockFragmentActivity   {


    ActionMode mMode;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTheme(R.style.Theme_Sherlock_Light_DarkActionBar);
        setContentView(R.layout.main);
         ActionBar bar = getSupportActionBar();
            bar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
            bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

            bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

            bar.setDisplayShowHomeEnabled(false);


            bar.setDisplayShowTitleEnabled(false);
            bar.setTitle("Currency Exchange");
            bar.addTab(bar
                    .newTab()
                    .setText("Converter")
                    .setTabListener(
                            new TabListener<Fragment>(this, "Converter",
                                    ConverterTab.class, null)));

            bar.addTab(bar
                    .newTab()
                    .setText("Favorites")
                    .setTabListener(
                            new TabListener1<Fragment>(this, "Favorites",
                                    FavoritesTab.class, null)));
            if (savedInstanceState != null) {
                bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
            }


    }


    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("tab", getSupportActionBar()
                .getSelectedNavigationIndex());
    }

    public class TabListener<T extends Fragment> implements ActionBar.TabListener {
        private final FragmentActivity mActivity;
        private final String mTag;
        private final Class<ConverterTab> mClass;
        private final Bundle mArgs;
        private Fragment mFragment;




        public TabListener(FragmentActivity activity, String tag, Class<ConverterTab> clz, Bundle args) {
            mActivity = activity;
            mTag = tag;
            mClass = clz;
            mArgs = args;
            FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();


            // 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.getSupportFragmentManager().findFragmentByTag(mTag);
            if (mFragment != null && !mFragment.isDetached()) {
                ft.detach(mFragment);
            }
        }




        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
             ft = mActivity.getSupportFragmentManager()
                        .beginTransaction();

                if (mFragment == null) {
                    mFragment = Fragment.instantiate(mActivity, mClass.getName(),
                            mArgs);
                    ft.add(android.R.id.content, mFragment, mTag);
                    ft.commit();
                } else {
                    ft.attach(mFragment);
                    ft.commit();
                }


        }




        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
               if (mFragment != null) {
                    //this segment removes the back history of everything in the tab you are leaving so when you click on the tab again you go back to a fresh start
                    FragmentManager man = mFragment.getFragmentManager();
                    if(man.getBackStackEntryCount()>0) //this check is required to prevent null point exceptions when clicking off of a tab with no history
                        man.popBackStack(man.getBackStackEntryAt(0).getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE); //this pops the stack back to index 0 so you can then detach and then later attach your initial fragment
                    //also it should be noted that if you do popbackstackimmediate here instead of just popbackstack you will see a flash as the gui changes back to the first fragment when the code executes
                    //end
                    ft.detach(mFragment);
                }



        }




        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub

        }



    }
    public class TabListener1<T extends Fragment> implements ActionBar.TabListener {
        private final FragmentActivity mActivity;
        private final String mTag;
        private final Class<FavoritesTab> mClass;
        private final Bundle mArgs;
        private Fragment mFragment;




        public TabListener1(FragmentActivity activity, String tag, Class<FavoritesTab> clz, Bundle args) {
            mActivity = activity;
            mTag = tag;
            mClass = clz;
            mArgs = args;
            FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();


            // 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.getSupportFragmentManager().findFragmentByTag(mTag);
            if (mFragment != null && !mFragment.isDetached()) {
                ft.detach(mFragment);
            }
        }




        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
             ft = mActivity.getSupportFragmentManager()
                        .beginTransaction();

                if (mFragment == null) {
                    mFragment = Fragment.instantiate(mActivity, mClass.getName(),
                            mArgs);
                    ft.add(android.R.id.content, mFragment, mTag);
                    ft.commit();
                } else {
                    ft.attach(mFragment);
                    ft.commit();
                }


        }




        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
             if (mFragment != null) {
                    //this segment removes the back history of everything in the tab you are leaving so when you click on the tab again you go back to a fresh start
                    FragmentManager man = mFragment.getFragmentManager();
                    if(man.getBackStackEntryCount()>0) //this check is required to prevent null point exceptions when clicking off of a tab with no history
                        man.popBackStack(man.getBackStackEntryAt(0).getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE); //this pops the stack back to index 0 so you can then detach and then later attach your initial fragment
                    //also it should be noted that if you do popbackstackimmediate here instead of just popbackstack you will see a flash as the gui changes back to the first fragment when the code executes
                    //end
                    ft.detach(mFragment);
                }


        }




        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub

        }



    }
}

And i put one button in converter tab and one checkbox in favorites tab.But now i want when i run my app its initially not selected any tab.Just show the main screen and when i pressed any tab it shows it's contents.Because initially i wanted to show other contents when no tab is selected.please tell me how can i do this?Please give me idea that how can i show initially main screen and then when i select any tab it shows its contents.I have attached image of my project:

enter image description here enter image description here


Solution

  • You can do this in the following way:

    bar.addTab(yourTab,false);
    

    Like this the tab is still visual selected but the action in the method onTabSelected in listener is not executed.