Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tab host - setCurrentTab(x) works for tab but not a content [Android]

I have created tab app.. now I am playing with screen rotation. I tried to set tabHost.getTabWidget().setCurrentTab(1), which should show second tab (first is 0). The point is that second tab is shown as selected, but shown content is from first tab... How can I solve that?

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.main);

    myCommunicator = new Communicator();
    dbAdapter = new ToDoDBAdapter(this);


    if (getLastNonConfigurationInstance() != null) 
    {
        CurrentTab = (Integer)getLastNonConfigurationInstance();
        createView();
    }
    else
    {
        BuildDialog = ProgressDialog.show(this, "Loading", "Updating data...", true, false);
        BuildDialog.show();
        new LoadChannels().execute();
    }

}


private void createView()
{
        tabHost = (TabHost)findViewById(android.R.id.tabhost);
        tabHost.setOnTabChangedListener(this);

        Intent intent; 
        TabSpec spec;
        intent = new Intent().setClass(this, Channels.class);

        // TAB 1
        spec = tabHost.newTabSpec("kanali").setIndicator("Kanali",getResources().getDrawable(R.drawable.menu_channels)).setContent(intent);
        tabHost.addTab(spec);


        intent = new Intent().setClass(this, Currently.class);

        // TAB 2
        spec = tabHost.newTabSpec("trenutno").setIndicator("Trenutno",getResources().getDrawable(R.drawable.menu_current)).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, Reminders.class);

        // TAB 3
        spec = tabHost.newTabSpec("opomniki").setIndicator("Opomniki",getResources().getDrawable(R.drawable.menu_reminder)).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, About.class);

        // TAB 4
        spec = tabHost.newTabSpec("oprogramu").setIndicator("O programu",getResources().getDrawable(R.drawable.menu_about)).setContent(intent);
        tabHost.addTab(spec);

        tabHost.setBackgroundColor(Color.WHITE);
        tabHost.setCurrentTab(1); // Should always set content to second
}

@Override public Object onRetainNonConfigurationInstance() { return CurrentTab; }

@Override
public void onTabChanged(String tabId) {
    CurrentTab = tabHost.getCurrentTab();
}
public void onDestroy() {
    super.onDestroy();

    // Close the database
    try {
        dbAdapter.close();
    } catch (Exception e) {
        // TODO: handle exception
    }
  }

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.main);
    createView();
}
like image 632
M.V. Avatar asked Apr 19 '11 07:04

M.V.


1 Answers

Why are you calling getTabWidget()? You should use the setCurrentTab() on the tabHost itself.

Works fine here.

tabHost.setCurrentTab(1);
like image 163
Codemonkey Avatar answered Oct 05 '22 19:10

Codemonkey