标签主机 - setCurrentTab(x)适用于标签但不适用于内容[Android]

时间:2011-04-19 07:14:48

标签: android tabs android-tabhost

我创建了标签应用..现在我正在玩屏幕旋转。我试着设置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
}

@覆盖     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 个答案:

答案 0 :(得分:15)

你为什么打电话给getTabWidget()?您应该使用setCurrentTab()本身的tabHost

在这里工作正常。

tabHost.setCurrentTab(1);

答案 1 :(得分:1)

使用 setCurrentTabByTag(字符串标记); 根据您提到的标记将是默认标签,希望它有帮助,有效(它当前正在为this代码工作!!)

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

link

答案 2 :(得分:0)

在尝试设置currentTab之前,您是否在调试器中检查了TabHost以确保所有选项卡都已成功添加?我遇到了类似的问题,如果您尝试引用超出未成功添加的选项卡范围的索引,则会发现TabHost.setCurrentTab仍设置为-1。 Android文档中未记录此行为。

答案 3 :(得分:0)

使用tabs.getTabAt(position).select();