2016-02-12 174 views
1

我想在一個提示輸入pin碼的方法中包含一個AlertDialog構建器,並且當按下肯定按鈕時,按照數據庫值檢查它,並向方法調用者返回true或false值。AlertDialog返回布爾值

例如:添加/編輯/刪除用戶任務需要PIN碼。我不想爲這三個(以及更多)這些操作生成不同的AlertDialog。我想將以下代碼封裝在TaskService類中,我可以從任何活動調用該類,並根據該活動中的結果做出反應。

所以TaskService.java將有:

public boolean isCorrectPin(View v){ 
    AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext()); 

    final EditText editText = new EditText(context); 
    builder.setView(editText); 

    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      if (editText.getText().toString()) == getPinCode(){ 
       //return true 
      } 
     } 
    }); 

    builder.show(); 
} 

和OpenTaskAdapter.java將有:

public void onBindViewHolder(ViewHolder holder, int position){ 
    holder.btnMarkAsComplete.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      if (service.isCorrectPin(v) { 
       //complete task 
      } 
     } 
    }); 
    holder.btnDelete.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      if (service.isCorrectPin(v) { 
       //delete task 
      } 
     } 
    }); 

需要注意的是這兩個按鈕的聽衆可以在完全不同的活動是很重要的。

回答

1

您可以創建自己的方法來生成與聽衆對話:

public void isCorrectPin(Context context, String title, String message, String btnPositive, final DialogSingleButtonListener dialogSingleButtonListener) { 
    final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context); 
    dialogBuilder.setTitle(title); 
    dialogBuilder.setMessage(message); 
    dialogBuilder.setPositiveButton(btnPositive, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      if (editText.getText().toString() == getPinCode()){ 
       dialogSingleButtonListener.onButtonClicked(dialog); 
      } 
     } 
    }); 

    AlertDialog dialog = dialogBuilder.create(); 
    dialog.show(); 
} 

而且監聽器類:

public interface DialogSingleButtonListener { 
    public abstract void onButtonClicked(DialogInterface dialog); 
} 

而且使用它像:

service.isCorrectPin(context, title, message, btnPositive 
     new DialogSingleButtonListener() { 
       @Override 
       public void onButtonClicked(DialogInterface dialog) { 
        //code here is only called if they entered a correct pin. 
       } 
     } 

); 
+0

這爲我工作, 謝謝。我用一些更具體的問題提交了編輯,因爲我花了幾分鐘的時間來確定代碼的功能。 –

2

對話框無法以您期望的方式「返回」值。一個對話框可以對其他對象進行更改,但不能對其進行一點代碼阻塞,並等待用戶完成與其交互。

相反,您需要爲提示對話框爲dismissed或按鈕或單擊時設置偵聽器,或者您需要從中獲取所需的任何其他事件信號。那些聽衆可以讀取由對話框收集和設置的數據。