我有一个活动,在打开对话框后立即打开一个对话框:
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPath = new File(getIntent().getExtras().getString("START_PATH"));
FTYPE = getIntent().getExtras().getString("FILTER");
showDialog(DIALOG_LOAD_FILE);
}
我正在努力做到这一点,所以当用户单击后退按钮(仍在对话框中时),将退出整个活动。我有以下内容:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent resultIntent = new Intent();
resultIntent.putExtra("FILE_PATH", mPath.toString());
setResult(Activity.RESULT_OK, resultIntent);
finish();
}
return true;
}
如果该对话框不再存在,则效果很好,但是如果该对话框仍处于活动状态,则不会被调用。有想法吗?
尝试一下
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
this);
// set prompts.xml to alertdialog builder
alertDialogBuilder.setView(promptsView);
alertDialogBuilder
.setCancelable(true);
// create alert dialog
final AlertDialog dialogDiscount = alertDialogBuilder.create();
// show it
dialogDiscount.show();
OnKeyListener keylistener = new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent KEvent) {
int keyaction = KEvent.getAction();
if(keyaction == KeyEvent.ACTION_DOWN)
{
int keycode = KEvent.getKeyCode();
int keyunicode = KEvent.getUnicodeChar(KEvent.getMetaState() );
char character = (char) keyunicode;
if(keycode==KeyCode.Enter){
}
}
return false;
}
};
dialogDiscount.setOnKeyListener(keylistener );
[在实例化onKeyDown()
时是否尝试覆盖Dialog
类中的Dialog
?我尚未测试过,但可以尝试类似
@Override
protected void onCreateDialog(int id) {
Dialog dialog = null;
switch(id) {
case DIALOG_LOAD_FILE:
dialog = new AlertDialog(mContext) {
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) {
dismiss();
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
};
break;
}
return dialog;
}
您必须创建DialogInterface.OnKeyListener
的对象,并且可以覆盖onKey(DialogInterface dialog, int keyCode, KeyEvent event)
。此方法捕获对话框内的键事件。例如:
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
//do something to your dialog like: dialogBuilder.setView(view);
DialogKeyListener dkl = new DialogKeyListener();
dialogBuilder.setOnKeyListener(dkl);
AlertDialog dialog = dialogBuilder.create();
dialog.show();
和侦听器类:
private class DialogKeyListener implements android.content.DialogInterface.OnKeyListener
{
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_BACK)
{
dialog.dismiss();
yourClassActivity.finish(); // or something like that
return false;
}
return true
}
}
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("your title");
alertDialog.setMessage("your message");
alertDialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
dialog.dismiss();
finish();
}
});
alertDialog.show();
FOR ANDROID X
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("your title");
alertDialog.setMessage("your message");
alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
dialog.dismiss();
finish();
}
});
alertDialog.show();