朋友的, 我在我的应用程序中实现了tabhost,我在我的活动tab1,tab2,tab3中定义了三个选项卡...这里我有一个问题是从tab3导航到tab1 atkey back press事件,我如何从tab3和tab2到达tab1 ,我尝试使用overided keyback按下,但有时它没有响应导航。没有覆盖onkey后退按下它只是退出应用程序。
这是我的代码
tabHost= getTabHost();
tabHost.addTab(tabHost.newTabSpec("tab1").setContent(
new Intent(this, DealCities.class)).setIndicator(prepareTabView("Deals",R.drawable.test)));
tabHost.addTab(tabHost.newTabSpec("tab2").setContent(new Intent(this, DbServerActivity.class))
.setIndicator(prepareTabView("My QuadDeals",R.drawable.mydeal)));
tabHost.addTab(tabHost.newTabSpec("tab3").setContent(new Intent(this, Account.class))
.setIndicator(prepareTabView("My Account",R.drawable.img_myaccount)));
这里tabhost在一个类中定义,tabhost对象是静态的
此处我的tab2后退按下事件的代码如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
try {
// userdealList.setVisibility(View.GONE);
// logalertTable.setVisibility(View.GONE);
// dealType.setVisibility(View.GONE);
// mydealBack=1;
// QuadMain.tabHost.setCurrentTab(0);
Intent i = new Intent();
i.setClass(DbServerActivity.this, QuadMain.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
} catch (Exception e) {
}
return true;
}
return super.onKeyDown(keyCode, event);
}
它有时只能正常工作,有时它不起作用..
提前致谢。
答案 0 :(得分:3)
查看本手册http://knightswhocode.com/wordpress/?p=46 - 教授如何使用TabHost。不幸的是,默认情况下onkeyBackPressed事件你只是转到上一个活动,因为你有一个主要的tabhost活动,它就退出了。我建议你覆盖按下的后退键并使用以下方法:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
YourParentActivity parentActivity;
parentActivity = (YourParentActivity) this.getParent();
parentActivity.switchTab(indexTabToSwitchTo);
return true;
}
return super.onKeyDown(keyCode, event);
}
答案 1 :(得分:2)
请勿在标签活动中处理KeyEvent.KEYCODE_BACK
,请在主TabActivity中进行操作。
只要您的标签活动onKeyDown()
方法无法处理,但他们会调用super.onKeyDown(keyCode, event);
,它就会过滤到您的TabActivity。
在您的TabActivity中有一个成员int currentTab = 0
然后在TabActivity中执行此操作...
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (currentTab == 0)
currentTab = 2;
else
currentTab--;
tabHost.setCurrentTab(currentTab);
return true;
}
else
return super.onKeyDown(keyCode, event);
}