2016-01-24 50 views
0

我有一个自定义的警报对话框,指出EditText和正面和负面按钮给用户4位数字。它工作正常,但我想做一些事情,当用户输入4位数字,然后单击软键盘的“完成”按钮时,执行一些代码,如正面按钮,然后关闭对话框。这是我的代码:如何通过onEdtitorActionListener模拟警报对话框动作

final AlertDialog.Builder builder = new AlertDialog.Builder(ConversationActivity.this); 
    builder.setTitle("Test"); 

    final EditText input = new EditText(ConversationActivity.this); 

    input.setInputType(InputType.TYPE_CLASS_NUMBER); 
    input.setImeOptions(EditorInfo.IME_ACTION_DONE); 

    input.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if(actionId == EditorInfo.IME_ACTION_DONE){ 
       // what should I want.?! 
      } 
      return false; 
     } 
    }); 

    int maxLength = 4; 
    input.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)}); 
    builder.setView(input); 

    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // Do something 
     } 
    }); 
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
     } 
    }); 

    builder.show(); 

谢谢。

回答

1

你可以这样做: -

1)在全球范围内声明警告对话框比如在你的活动

.. 
.. 
    //Alert Dialog instance 
    private AlertDialog alertDialog; 
    int maxLength = 4; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

.. 
.. 

,并使用该实例来解散你的警告对话框

final AlertDialog.Builder builder = new AlertDialog.Builder(
         MainActivity.this); 
       builder.setTitle("Test"); 

       final EditText input = new EditText(MainActivity.this); 

       input.setInputType(InputType.TYPE_CLASS_NUMBER); 
       input.setImeOptions(EditorInfo.IME_ACTION_DONE); 

       input.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
        @Override 
        public boolean onEditorAction(TextView v, int actionId, 
          KeyEvent event) { 
         if (actionId == EditorInfo.IME_ACTION_DONE) { 

          // This is How you do it want.?! 
          if (input.getText().toString().length() == maxLength) { 

           //Use alert Dialog instance to dismiss 
           alertDialog.dismiss(); 

           Toast.makeText(getApplicationContext(), 
             "You Entered" + input.getText().toString(), 
             Toast.LENGTH_SHORT).show(); 
          } else { 

           Toast.makeText(getApplicationContext(), 
             "Please Enter 4 Digits", Toast.LENGTH_SHORT) 
             .show(); 

          } 

         } 
         return false; 
        } 
       }); 

       input.setFilters(new InputFilter[] { new InputFilter.LengthFilter(
         maxLength) }); 

       builder.setView(input); 

       builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 

         Toast.makeText(getApplicationContext(), 
           "You Entered" + input.getText().toString(), 
           Toast.LENGTH_SHORT).show(); 

        } 
       }); 
       builder.setNegativeButton("Cancel", 
         new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 

           // This should I want.?! 
           dialog.cancel(); 

          } 
         }); 


//Assign alert Dialog instance like this.. 
       alertDialog = builder.show(); 

希望这将为你工作!

+0

非常好trick.thanks @HiteshSahu – Beppe