2

我有一个使用 TabHost 的 Android 应用程序,基于所选选项卡调用其他活动的活动简称为 Main.java。我试图覆盖 Main.java 类中的后退按钮事件,但它似乎没有看到它。我正在尝试显示一个对话框窗口并与用户确认他们想要退出,如果他们点击确定让它完全关闭应用程序(不仅仅是发送到后台),如果他们点击取消,显然让它保持打开状态。关于为什么这似乎不起作用的任何建议?

@Override
public void onBackPressed() 
{               
     AlertDialog.Builder alert = new AlertDialog.Builder(getApplicationContext());
     alert.setMessage("Test dialog");
     alert.show();
}
4

3 回答 3

11

事实证明这很容易。将以下代码添加到您的子选项卡活动:

@Override
public void onBackPressed() {
this.getParent().onBackPressed();   
}

然后在 TabActivity 中执行真正的逻辑:

 @Override
public void onBackPressed() {
// Called by children
 AlertDialog.Builder alert = new AlertDialog.Builder(getApplicationContext());
 alert.setMessage("Test dialog");
 alert.show();
}

否则,孩子会在不通知标签宿主的情况下拦截并消费事件。

于 2013-05-16T05:34:29.910 回答
1

我知道这来得很晚,但它仍然可以帮助某人

请将以下代码添加到托管其他活动的 TabActivity 中,并将代码添加到使用 Tabhost 托管的每个子活动中。它对我有用。

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        if (android.os.Build.VERSION.SDK_INT > 5
                && keyCode == KeyEvent.KEYCODE_BACK
                && event.getRepeatCount() == 0) {
            Log.d("CDA", "onKeyDown Called");
            onBackPressed();
            return true; 
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public void onBackPressed() {
       Log.d("CDA", "onBackPressed Called");
       Intent setIntent = new Intent(Intent.ACTION_MAIN);
       setIntent.addCategory(Intent.CATEGORY_HOME);
       setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       startActivity(setIntent);
    }

祝你好运。

于 2016-11-14T03:52:57.620 回答
0
Hi All below is my solution for this question -

//////---------------------------/////////////

FragmentManager mFragmentManager = getSupportFragmentManager();

@Override
public void onBackPressed() {

    if (getParent() instanceof TabHostActivity) {
        int count = mFragmentManager.getBackStackEntryCount();
        if(count == 0){
            // TODO: Call your exist alert
        }
        else{
             super.onBackPressed();  
        }
    }
    else{
         super.onBackPressed();  
    }
}


//////---------------------------/////////////
于 2014-05-29T09:36:10.563 回答