Android ActionBar tabs set initially selected tab

mdupls picture mdupls · Mar 27, 2012 · Viewed 32k times · Source

I have noticed that when using

actionBar.setSelectedNavigationItem(x)

in the onCreate() method of my Activity, the tab item at position 0 is always selected first and then the tab item at position x is loaded. This means that (since I'm using Fragments) 2 Fragments are loaded. One of them being unnecessary...

Here's my code:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Determine which bundle to use; either the saved instance or a bundle
    // that has been passed in through an intent.
    Bundle bundle = getIntent().getExtras();
    if (bundle == null) {
        bundle = savedInstanceState;
    }

    // Initialize members with bundle or default values.
    int position;
    if (bundle != null) {
        position = bundle.getInt("selected_tab");
    } else {
        position = 0;
    }

    // Set the tabs.
    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    Tab tab = actionBar
            .newTab()
            .setText("Tab 1")
            .setTabListener(
                    new TabListener<RendersGridFragment>(this, "1",
                            RendersGridFragment.class));
    actionBar.addTab(tab);

    tab = actionBar
            .newTab()
            .setText("Tab 2")
            .setTabListener(
                    new TabListener<RendersGridFragment>(this, "2",
                            RendersGridFragment.class));
    actionBar.addTab(tab);

    tab = actionBar
            .newTab()
            .setText("Tab 3")
            .setTabListener(
                    new TabListener<RendersGridFragment>(this, "3",
                            RendersGridFragment.class));
    actionBar.addTab(tab);

    actionBar.setSelectedNavigationItem(position);
}

It seems that the tab at position 0 is selected initially by default. But, as you can see, I'm passing bundles to make sure the last selected tab is still selected when the activity onCreate() method is run again.

For example, if the last selected tab is at position 2, the onCreate() runs and the tab at position is 0 is loaded, then the tab at position 2 is loaded.

How can I make sure the ActionBar doesn't select tab at position 0 first when using actionBar.setSelectedNavigationItem(position).

Answer

sastraxi picture sastraxi · Mar 27, 2012

Use the other addTab calls to override this behaviour. You'll need to add the tab you want to be selected first (in your case, the tab at position 2). Relevant Javadoc

actionBar.addTab(tab2);
actionBar.addTab(tab0, 0, false);
actionBar.addTab(tab1, 1, false);