android - 为什么按下搜索按钮时对话框消失

标签 android dialog

在我的应用程序中,我尝试在 Activity 开始时打开一个对话框,并且它有一个肯定按钮。单击该按钮将打开一个新 Activity 。它与以下代码一起工作正常。但是当我长按菜单按钮或搜索按钮时,对话框就会消失。即使我按下菜单或搜索按钮,如何才能使此对话框保持不变。谢谢。

public class Sam3Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    TextView title = new TextView(this);
    title.setText("DM2");
    title.setBackgroundColor(Color.DKGRAY);
    title.setPadding(10, 10, 10, 10);
    title.setGravity(Gravity.CENTER);
    title.setTextColor(Color.WHITE);
    title.setTextSize(20);
    /* alert message */
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setCustomTitle(title);

    builder.setMessage("dialog with message").setCancelable(false).setPositiveButton(
            "Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.dismiss();
                    Log.d("choose","on dissmiss");
                startActivity(new Intent(getApplicationContext(),
                                                              StatisticDisplay.class));//second activity
                }
            });
    AlertDialog alert = builder.create();

    alert.show();
     }
}

最佳答案

通过将 onKeyListener 附加到 Dialog 来处理按下的按键,在我的示例中,我只是处理搜索键,但您应该得到观点。如果您从未使用过这样的监听器,则返回 true 意味着事件不应传播,因此会防止系统捕获搜索显示对话框时按下 键。

在任何其他情况下( key 不是KEYCODE_SEARCH),它只会传递此监听器,就好像它不存在一样。 :)

... 
builder.setOnKeyListener(new OnKeyListener(){
            @Override
            public boolean onKey(DialogInterface dialog, 
                                 int keyCode,
                                 KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_SEARCH ) return true;
                return false;
            }
        });
...

相关文档:

关于android - 为什么按下搜索按钮时对话框消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10596359/

相关文章:

java - Android:按钮被禁用,仅在执行对话框功能后才起作用

javascript - 如何用对话框替换警告框?

android - 让操作栏 "up navigation"触发dialogfragment

javascript - AEM 6.1 触摸 UI 对话框 - 手动调用对话框验证事件

android - 列表对话框中的图标

Android:使用 fragment 的更好方式

java - Android mediaPlayer setDataSource 失败并给出 IOException

Android,如何使用动画来显示闪烁?

java - 单击时返回整个字符串的 Spannable 字符串

ios - 从 MFMailComposeViewController 返回时 MonoTouch 应用程序崩溃