需要Android tabhost后退导航

时间:2011-02-18 08:23:13

标签: android

朋友的,      我在我的应用程序中实现了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);
    }

它有时只能正常工作,有时它不起作用..

提前致谢。

2 个答案:

答案 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); 
}