Android TabHost - 收回按钮

时间:2013-05-06 19:12:58

标签: android dialog android-tabhost back confirm

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

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

3 个答案:

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

否则,孩子们将在不通知标签主持人的情况下拦截和使用该事件。

答案 1 :(得分:1)

我知道这种情况来得太晚了,但它仍然可以帮助某人

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

@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);
    }

祝你好运。

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


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