我有一个 MainActivity,我在这里发布部分代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.action_quit:
moveTaskToBack(true);
return true;
case R.id.action_help:
//display the help activity
Intent myIntent = new Intent( this, ShowHelp.class);
startActivityForResult(myIntent, 0);
return true;
case R.id.action_about:
//display the about window
//aboutApp();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void aboutApp() {
// custom dialog
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.about);
dialog.setTitle("About TollCulator");
TextView textViewAbout = (TextView) dialog.findViewById(R.id.tvContents);
textViewAbout.setText("About: ");
textViewAbout.append("\n\tTollCulator - Toll Calculator");
textViewAbout.setMovementMethod(new ScrollingMovementMethod());
Button btnCloseIt = (Button) dialog.findViewById(R.id.btnOk);
// if button is clicked, close the custom dialog
btnCloseIt.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dialog.dismiss();
}
});
ImageView iv1 = (ImageView) dialog.findViewById(R.id.imgFB);
iv1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Uri uri = Uri.parse("https://www.facebook.com/PagesByZ"););
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
dialog.cancel();
startActivity(intent);
}
});
dialog.show();
}
此处的 ShowHelp.class 部分代码本身就是一个 Activity:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case 16908332:
Intent myIntent = new Intent(getApplicationContext(), MainActivity.class);
startActivityForResult(myIntent, 0);
//finish();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
// do something on back.
Intent myIntent = new Intent(getApplicationContext(), MainActivity.class);
startActivityForResult(myIntent, 0);
//finish();
return;
}
现在,当我从菜单中选择 action_help
时,它会打开 ShowClass Activity,我可以按后退按钮,它会让我毫无问题地返回到 MainActivity。
现在,如果我选择 action_about
,则会弹出“关于”对话框,如果我单击对话框中的图标,则会弹出以下内容:
此时,如果我决定按“返回”,而不是关闭弹出窗口并显示“关于”对话框,我只会进入主屏幕。
注释 ShowClass 中的 finish();
方法允许我从“Complete action using”中单击“BACK”按钮,但它不会将我带到 MainActivity,而是将我带到 ShowClass从那里我可以再次按“后退”按钮返回到 MainActivity。因此,只要我先选择 action_help
,按“返回”键就会返回 ShowHelp。
当“关于”对话框中弹出完整操作时,我设置了一个日志,它处于 onPause() 状态,如果我一开始没有运行 ShowHelp,我的应用程序将直接转到 onStop() 和 onDestroy ()。
请帮我解决这个问题。
为了测试它,我创建了一个没有 ShowHelp 类的演示,只有对话框,通过按后退按钮,使用对话框的完成操作将关闭,然后再次按后退将关闭关于对话框。所以我不确定发生了什么。
最佳答案
声明一个全局 boolean 变量chooserIsShowing
:
boolean chooserIsShowing;
在这里将其设置为 true:
ImageView iv1 = (ImageView) dialog.findViewById(R.id.imgFB);
iv1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// set the flag
chooserIsShowing = true;
Uri uri = Uri.parse("https://www.facebook.com/PagesByZ"););
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
dialog.cancel();
startActivity(intent);
}
});
更改重写的onBackPressed()
方法:
@Override
public void onBackPressed() {
if (!chooserIsShowing) {
// do something on back.
Intent myIntent = new Intent(getApplicationContext(), MainActivity.class);
startActivityForResult(myIntent, 0);
finish();
}
// remove the flag
chooserIsShowing = false;
return;
}
编辑1:
将 dialog
声明为全局变量:
Dialog dialog;
更改aboutApp()
:
public void aboutApp() {
dialog = new Dialog(this);
....
}
重写 MainActivity 中的 onKeyDown(int, KeyEvent)
方法:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
您可以删除 chooserIsShowing
,因为它不是必需的。
最终解决方案:
在 list 中为此 Activity 定义了 noHistory
标志。删除它并修复 ShowHelp
的 onBackPressed()
方法解决了该问题。
关于java - 具有 Maincivity 的两项 Activity 会导致后退按钮无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18280074/