3

我有一个包含五个标签的活动。当我从选项卡 1 转到选项卡 2 或选项卡 3 时,一切看起来都很好。如何以编程方式从选项卡 2 回到选项卡 1?

    Intent myIntent = new Intent(this, Tab1.class);             
    myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(myIntent);

这无法正常工作,因为它在没有任何选项卡的情况下启动了活动 1。

从选项卡 1 转到选项卡 2 时,我可以同时看到选项卡 1 和选项卡 2(当前选项卡已激活)。但是当从选项卡 2 转到选项卡 1 时,选项卡 1 和选项卡 2 都会从活动中消失。什么可能导致这种情况?

4

4 回答 4

2

这肯定会帮助你。

TabHost tabHost =  (TabHost) getParent().findViewById(android.R.id.tabhost);
tabHost.setCurrentTab(1);  

或者你可以参考这个链接

如何在 Android 中使用 buttonclick 以编程方式切换选项卡

谢谢 :)

于 2012-07-24T12:20:19.610 回答
1

只需使用 finish() 方法

public void onClick(View v) 
{                             
    finish();
    startActivity(new Intent(Activity2.this, Activity1.class));            
}     
于 2012-07-24T12:21:41.983 回答
0

我不知道Intent.FLAG_ACTIVITY_CLEAR_TOP,从不需要那个,但是提到的丢失标签的效果是通过从您的 TabHost 调用产生的startActivity(),而不是您的一个标签。如果是这种情况,请将呼叫移到那里,您的标签应该保留。

于 2012-07-24T12:26:51.387 回答
0

我有类似的情况,但似乎没有一个答案有帮助。所以,我在这里发布我的解决方案:

// tab selection history, each tab has a tag which is a string
private List<String> tabIdHistory = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstanceState);
    // this layout contains TabHost and TabWidget
    setContentView(R.layout.activity_main); 

    TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost);
    tabHost.setup();
    tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {

        @Override
        public void onTabChanged(String tabId) {
            tabIdHistory.remove(tabId); // ensure uniqueness
            tabIdHistory.add(tabId);
        }
    });
    // continue your tab initialisation, such as
    // tabHost.addTab(tabHost.newTabSpec(TAG)
    //         .setContent(...).setIndicator(...));
}

@Override
public void onBackPressed() {
    if (tabIdHistory.size() > 1) {
        // pop the current last item, we want the second last
        tabIdHistory.remove(tabIdHistory.size() - 1);
        tabHost.setCurrentTabByTag(tabIdHistory.get(tabIdHistory.size() - 1));
    } else {
        super.onBackPressed();
    }
}

如果使用 select tab#1, tab#3, tab#2, tab#1,则返回堆栈为“3, 2, 1”,如果用户按返回按钮 3 次,应用程序将退出到主屏幕。如果要保留完整的历史记录,请注释掉这一行:

tabIdHistory.remove(tabId);

于 2014-10-20T22:26:14.203 回答