2017-11-19 4 views
0

내 앱의 한 활동에서 5 개의 EditText 필드가 있습니다. 그러나 다른 4 개의 EditTexts가 비어 있지 않은 경우에만 etPlayer5을 활성화해야합니다. 이 작은 코드를 작성하여 이것을 달성했습니다.EditText가 실시간으로 비어 있는지 확인하십시오.

etPlayer1 = (EditText) findViewById(R.id.etPlayer1); 
    etPlayer2 = (EditText) findViewById(R.id.etPlayer2); 
    etPlayer3 = (EditText) findViewById(R.id.etPlayer3); 
    etPlayer4 = (EditText) findViewById(R.id.etPlayer4); 
    etPlayer5 = (EditText) findViewById(R.id.etPlayer5); 

    if (namePlayer1.matches("")||namePlayer2.matches("")||namePlayer3.matches("")||namePlayer4.matches("")) { 
     etPlayer5.setEnabled(false); 
     etPlayer5.setFocusable(false); 
    } 
    else { 
     etPlayer5.setEnabled(true); 
     etPlayer5.setFocusable(true); 
    } 

물론이 코드는 실시간으로 작동하지 않습니다. EditTexts 1 ~ 4가 채워지면 etPlayer5이 자동으로 활성화됩니다. 버튼이나 무언가를 사용하지 않고 무엇이 필요합니까?

감사합니다.

+0

같은 것을 할 수 할 수에 대한 코드입니다 글고의 enable.Hope을 할 수있는 시간이다 내 질문에 왜 당신이 downvote 때 잘못 말해 줄래? 내 특정 문제는 다른 곳에서는 답변되지 않았습니다. – newman

+0

나는 또한 왜 이것이 downvoted인지 모른다. 나는 당신이 히트와 케이스에 의해 victomised 생각 : 나는 그것을 upvoting 오전 –

+0

내 업데이트 된 답변을 확인 샘플 코드를 작성했습니다 –

답변

0

모든 4 개의 편집 문구가있는 textChangeListener를 가질 수 있으며 모든 편집 문구에 대해 부울을 유지할 수 있습니다. onTextChange를 호출 할 때 부울을 true로 업데이트하고이 편집 텍스트에서 문자열 길이가 1인지 확인하고 나머지 부울을 더 확인하십시오. 이것은 속임수입니다. 이제이 helps.Below 위의 설명

public class MainActivity extends AppCompatActivity { 

EditText et1, et2, et3, et4, et5; 
boolean firsEditText, secondEditText, thirdEditText, fourthEditText, fifthEditText; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    et1 = (EditText) findViewById(R.id.et1); 
    et2 = (EditText) findViewById(R.id.et2); 
    et3 = (EditText) findViewById(R.id.et3); 
    et4 = (EditText) findViewById(R.id.et4); 
    et5 = (EditText) findViewById(R.id.et5); 

    et1.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) { 
      if (s.toString().length() > 0) { 
       firsEditText = true; 
       if (checkAllTrue()) 
        et5.setEnabled(true); 
      } else { 
       firsEditText = false; 
       et5.setEnabled(false); 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 

    et2.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) { 
      if (s.toString().length() > 0) { 
       secondEditText = true; 
       if (checkAllTrue()) 
        et5.setEnabled(true); 
      } else { 
       secondEditText = false; 
       et5.setEnabled(false); 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 

    et3.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) { 
      if (s.toString().length() > 0) { 
       thirdEditText = true; 
       if (checkAllTrue()) 
        et5.setEnabled(true); 
      } else { 
       thirdEditText = false; 
       et5.setEnabled(false); 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 

    et4.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) { 
      if (s.toString().length() > 0) { 
       fourthEditText = true; 
       if (checkAllTrue()) 
        et5.setEnabled(true); 
      } else { 
       fourthEditText = false; 
       et5.setEnabled(false); 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 


} 

private boolean checkAllTrue() { 
    if (firsEditText && secondEditText && thirdEditText && fourthEditText) 
     return true; 
    return false; 
} 

}

+0

위대한, 감사합니다! 또한 et5.setEnabled (false); 줄을 추가했습니다. onCreate 메서드에 전달하여 기본적으로 비활성화됩니다. – newman

+0

@newman 당신은 당신의 활동에 하나 이상의 코드 라인을 추가하는 대신 XML과 동일한 것을 할 수 있습니다;) –

0

당신은 적어도이

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

    boolean player1Changed = false, player2Changed = false; 

    setContentView(R.layout.main); 
    etPlayer1 = (EditText) findViewById(R.id.etPlayer1); 
    etPlayer2 = (EditText) findViewById(R.id.etPlayer2); 
    etPlayer5 = (EditText) findViewById(R.id.etPlayer5); 

    etPlayer1.addTextChangedListener(new TextWatcher() { 

     public void afterTextChanged(Editable s) { 

     // you can call or do what you want with your EditText here 
     player1Changed = true; 

     if(player1Changed && player2Changed){ 
      etPlayer5.setEnabled(true); 
      etPlayer5.setFocusable(true); 
     } 

     } 

     public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

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

etPlayer2.addTextChangedListener(new TextWatcher() { 

     public void afterTextChanged(Editable s) { 

     // you can call or do what you want with your EditText here 
     player2Changed = true; 

     if(player1Changed && player2Changed){ 
      etPlayer5.setEnabled(true); 
      etPlayer5.setFocusable(true); 
     } 

     } 

     public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

     public void onTextChanged(CharSequence s, int start, int before, int count) {} 
    }); 
} 
} 
관련 문제