android选项卡活动转到上一个选项卡

时间:2012-07-24 12:15:16

标签: android tabs

我有一个包含五个标签的活动。当我从选项卡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 个答案:

答案 0 :(得分:2)

这肯定会帮到你。

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

或者你可以参考这个链接

How to programmatically switch tabs using buttonclick in Android

谢谢:)

答案 1 :(得分:1)

只需使用finish()方法

public void onClick(View v) 
{                             
    finish();
    startActivity(new Intent(Activity2.this, Activity1.class));            
}     

答案 2 :(得分:0)

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

答案 3 :(得分: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();
    }
}

如果使用选择标签#1,标签#3,标签#2,标签#1,则后排是“3,2,1”,如果用户按下后退按钮三次,应用程序将退出主屏幕。如果您想保留完整的历史记录,请注释掉这一行:

  

tabIdHistory.remove(tabId);