【问题标题】:Android overriding onKeyDown within DialogAndroid 在 Dialog 中覆盖 onKeyDown
【发布时间】:2011-07-01 18:28:56
【问题描述】:

我有一个活动,它一打开就打开一个对话框:

/** 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;
}

如果对话框不再存在,这很好用,但如果对话框仍然处于活动状态,则不会被调用。想法?

【问题讨论】:

    标签: android android-activity dialog back-button


    【解决方案1】:

    试试这个

    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 );
    

    【讨论】:

      【解决方案2】:

      您是否尝试在实例化Dialog 时覆盖Dialog 类中的onKeyDown()?我还没有测试过,但试试类似的东西

      @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;
      }
      

      【讨论】:

        【解决方案3】:

        您必须创建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
        }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-04-14
          • 1970-01-01
          • 1970-01-01
          • 2021-11-04
          • 1970-01-01
          • 1970-01-01
          • 2013-09-27
          相关资源
          最近更新 更多