我有一个使用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();
}
答案 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();
}
}
//////---------------------------/////////////