Хост вкладок - setCurrentTab (x) работает для вкладок, но не для контента [Android] - PullRequest
5 голосов
/ 19 апреля 2011

Я создал приложение с вкладками .. теперь я играю с поворотом экрана. Я попытался установить tabHost.getTabWidget().setCurrentTab(1), который должен показать вторую вкладку (первая - 0). Дело в том, что вторая вкладка отображается как выбранная, но показанный контент находится на первой вкладке ... Как я могу решить эту проблему?

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 () { вернуть 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();
}

Ответы [ 4 ]

15 голосов
/ 19 апреля 2011

Почему вы звоните getTabWidget()?Вы должны использовать setCurrentTab() на самом tabHost.

Здесь отлично работает.

tabHost.setCurrentTab(1);
1 голос
/ 28 марта 2012

Использовать setCurrentTabByTag (Строковый тег); В зависимости от упомянутого вами тега будет вкладка по умолчанию, надеюсь, это поможет, работает (Это правильно работает для этого кода !!)

private static final String A ="Kanali"; //required defualt tab name
.
.
.
tabHost.setCurrentTabByTag (A);

ссылка

0 голосов
/ 12 апреля 2016

Использование tabs.getTabAt(position).select();

0 голосов
/ 25 апреля 2011

Вы проверяли TabHost в отладчике, чтобы убедиться, что все вкладки были успешно добавлены до того, как вы попытались установить currentTab? У меня была похожая проблема, и я обнаружил, что TabHost.setCurrentTab остается установленным в -1, если вы пытаетесь сослаться на индекс, который находится вне диапазона вкладок, которые не были успешно добавлены. Это поведение не описано в документации Android.

...