[英]How to show alert dialog or dialog when press device back button or toolbar back arrow
[英]Detect Back Button Event when Dialog is Open
我正在構建一個具有2個打開的對話框的應用程序,我希望如果某些對話框打開時用戶按下“后退”按鈕,則會發生某些事情。 但是,由於某些原因,當對話框打開時,后退按鈕事件未注冊。 我通過在onBackPressed()中放置一個日志進行了測試,並且只要對話框未打開並且我只是在主要活動上,日志就會顯示在logcat上。 但是,如果對話是開放的,我將得到以下信息:
W / InputEventReceiver:嘗試完成輸入事件,但輸入事件接收器已被處置。
下面,我放置了對話的代碼:
public void pair() {
final Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
AlertDialog.Builder pairedList = new AlertDialog.Builder(this);
pairedList.setTitle("Paired Devices");
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.select_dialog_singlechoice);
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
arrayAdapter.add(device.getName());
}
}
pairedList.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
mBluetoothAdapter.disable();
// pair_dialog = false;
}
});
pairedList.setPositiveButton("Pair New", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivityForResult(new Intent(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS), 0);
}
});
pairedList.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// connect_dialog = true;
String strName = arrayAdapter.getItem(which);
AlertDialog.Builder builderInner = new AlertDialog.Builder(MainActivity.this);
builderInner.setMessage(strName);
builderInner.setTitle("Connect To:");
builderInner.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
for (BluetoothDevice device : pairedDevices) {
if(device.getName().equals(strName)){
paired = device;
dialog.dismiss();
}
}
}
});
builderInner.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// connect_dialog = false;
pairedList.show();
}
});
builderInner.show();
}
});
pairedList.show();
// pair_dialog = true;
}
下面是我的onBackPressed()方法,它緊接在上述方法之后。 我認為沒有什么不同尋常的。
@Override
public void onBackPressed() {
Log.e(TAG, "Back Button Pressed");
super.onBackPressed();
}
就像我說的那樣,如果對話框未打開,則日志在logcat中顯示就很好,但是如果對話框打開,就好像沒有注冊“后退”按鈕。
這對我有用...
yuordialog.setOnKeyListener(new Dialog.OnKeyListener() {
@Override
public boolean onKey(DialogInterface arg0, int keyCode,
KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//your stuff....
}
return true;
}
});
如果您添加了,
dialog.setCancelable(false);
改成
dialog.setCancelable(true);
實際上,setCancelable(false)會取消對話框外的觸摸事件,並同時按回。
您也可以使用
builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
//your dismiss code here
}
});
這將偵聽backpress事件並通過觸摸消除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.