我有一个包含五个标签的活动。当我从选项卡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都会从活动中消失。什么可能导致这种情况?
答案 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);