2016-10-20 4 views
1

그래서 버튼을 클릭하면 팝업 메뉴가 나타납니다. 이 메뉴에서 사용자는 문자열 일 수있는 "Assignment Name"을 입력하고 "Grade"및 "Max Points Available"을 숫자로 입력 할 수 있습니다. 이제 사용자가 아무 것도 입력하지 않거나 해당 EditText 필드에 null을 입력하고 싶습니다. 유효한 입력이 입력 될 때까지 OK 버튼을 비활성화하는 방법이 있습니다. 다음은 팝업이 보이는 모습입니다.Android : 특정 조건에서 AlertDialogBuilder의 확인 버튼 사용 안 함

enter image description here

다음은 또한, 나는 "할당 이름은"이미 내 데이터베이스에 존재하는 경우 "OK"버튼을 비활성화 할

Button add = (Button)findViewById(R.id.addBtn); 
add.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view){ 
      LayoutInflater li = LayoutInflater.from(context); 
      View promptsView = li.inflate(R.layout.add_individual_name, null); 

      AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 
      alertDialogBuilder.setView(promptsView); 

      final EditText assignmentName = (EditText) promptsView.findViewById(R.id.enteredIndividualName); 
      final EditText gradeReceived = (EditText) promptsView.findViewById(R.id.enteredUserGrade); 
      final EditText maxPoints = (EditText) promptsView.findViewById(R.id.enteredMaxPoints); 
      alertDialogBuilder.setCancelable(false) 
        .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          String name = assignmentName.getText().toString(); 
          String grade = gradeReceived.getText().toString(); 
          String totalPossible = maxPoints.getText().toString(); 
          checkIfNameAlreadyExists(name); 
         } 
        }) 
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          dialog.cancel(); 
         } 
        }); 

      final AlertDialog alertDialog = alertDialogBuilder.create(); 
      alertDialog.show(); 

     }}); 

MainActivity

내 코드입니다. 항목이 DB에 존재하는지 확인하는 함수가 있습니다.

AlertDialog 또는 기타 XML 코드를보고 싶다면 알려주세요.

감사

답변

1

당신은 당신의 EditTextTextWatcher을 추가해야합니다. afterTextChanged에서 OK 버튼의 활성화/비활성화 조건을 확인하십시오.

// Your alert dialog config 
... 
final AlertDialog alertDialog = alertDialogBuilder.create(); 
alertDialog.show(); 

// disable the button as default start 
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); 

// add TextWatcher for EditText 
editTextAssignmentName.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) {} 

    @Override 
    public void afterTextChanged(Editable s) { 

     if (s.length() >= 1) { // add your condition here, in your case it is checkIfNameAlreadyExists 
      alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true); 
     } else { 
      alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); 
     } 
    } 
}); 
+0

감사합니다. 하지만 정확히 어디에 코드 블록을 넣을 수 있습니까? 'alertDialogBuilder.setCancelable (false)'줄 앞에 넣으면 "OK"버튼이 사라지고 그 줄 다음에 넣으면 아무 효과가 없습니다. –

+0

내 대답 (마지막 AlertDialog alertDialog = alertDialogBuilder.create(); 후alertDialog.show();) 후 코드 블록을 넣어보십시오 –

+0

예상대로 완벽하게 작동합니다. 고마워요! –