2014-01-27 47 views
0

我有一个自定义AlertDialog与PIN的EditText。使用SharedPreferences检查正面按钮OnClick的editText中的PIN。如果匹配,我想关闭对话框,否则它应该保持打开状态。 当PIN码正确时,对话框关闭并重新出现,我不希望它重新出现。 感谢您的帮助提前。不能关闭AlertDialog。它不断弹出

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    // TODO Auto-generated method stub 

    if ((System.currentTimeMillis() - mainScreenActivity.lastLoggedIn)/1000 >= 120) { 
     //startActivity(pinVarificationActivity); 
     //Toast.makeText(getApplicationContext(),"Session has timed out, please enter your PIN",Toast.LENGTH_LONG).show(); 

     LayoutInflater inflaterPinVerificationDialog = this.getLayoutInflater(); 
     final View inflatorPinVerificationDialog = inflaterPinVerificationDialog.inflate(R.layout.dialog_pin_verification, null); 
     final AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.AlertDialogCustom)); 
     builder.setTitle("Session timed out. Please enter PIN"); 
     builder.setView(inflatorPinVerificationDialog); 
     pinFromDialog = (EditText) inflatorPinVerificationDialog.findViewById(R.id.etDialogPin); 

     builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface arg0, int arg1) { 
       String dialogPinValue = pinFromDialog.getText().toString(); 

       String sharedPrefPinVal = loginData.getString("pin", "not found"); 
       if (sharedPrefPinVal.equals(dialogPinValue)) { 
        Toast.makeText(getApplicationContext(), "login successful", 
          Toast.LENGTH_SHORT).show();      
        mainScreenActivity.lastLoggedIn = System.currentTimeMillis(); 
        alertDialogPinVerification.dismiss(); 


       } else { 
        Toast.makeText(getApplicationContext(), 
          "Incorrect pin - Please try again", 
          Toast.LENGTH_LONG).show(); 
       } 

      } 
     }); 
     builder.setNegativeButton("Forgot PIN", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     alertDialogPinVerification = builder.create(); 

     alertDialogPinVerification.show(); 

    } else {    
     mainScreenActivity.lastLoggedIn = System.currentTimeMillis(); 
    } 
    return super.dispatchTouchEvent(ev); 
} 

回答

0

它看起来好像你是这样做的每一个触摸事件。如果您只尝试过一次,那么您应该检查传入的MotionEvent并仅触发一次TouchDown。您可能会根据在触摸,触摸,移动等情况下触发的事件调用多个警报对话框。这会让它看起来再次打开,但实际上是因为它们之间存在多个对话框。

​​

为了保持警觉窗口打开,您可以按照一对夫妇的建议,在这两篇文章中提到:Tech TipsRe-create AlertDialog。这两者都依赖于覆盖并创建自己的AlertDialog窗口。

+0

嗨周杰伦,感谢您的回复,现在为我工作。 目前它取消含有吐司消息的对话框为不正确的引脚。 如果我不想在PIN码错误时取消对话框,或者如何重新打开PIN码输入对话框,您能建议做什么吗? – BRDroid