2013-02-12 118 views
0

我有兩個EditText框和一個包含兩個單選按鈕的RadioGroup。當我開始在任何一個編輯文本框中輸入輸入時,所有的單選按鈕都必須自動關閉(如果任何一個按鈕已經被選中)並且另一個edittext也應該被清除。如果我檢查任何兩個單選按鈕,則應清除所有編輯文本框(如果他們有任何輸入數據)。這是我迄今爲止所做的。Editext和RadioButton android

裏面的OnCreate():

et1 = (EditText)findViewById(R.id.editText1); 
    et1.setOnFocusChangeListener(this); 
    et1.addTextChangedListener(this); 

    et2 = (EditText)findViewById(R.id.editText2); 
    et2.setOnFocusChangeListener(this); 
    et2.addTextChangedListener(this); 

    radioButton1 = (RadioButton)findViewById(R.id.rb1); 
    radioButton2 = (RadioButton)findViewById(R.id.rb2); 
    RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup);   
    radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 

      et1.setText(""); 
      et2.setText(""); 

     } 

    }); 

而且......

@Override 
public void onFocusChange(View v, boolean hasFocus) { 

    switch (v.getId()) { 
    case R.id.editText1: 
     whoHasFocus = 1; 

     break; 
    case R.id.editText2 : 
     whoHasFocus = 2; 

     break; 

    } 

} 

而且

@Override 
public void afterTextChanged(Editable edt) { 

    if(whoHasFocus == 1){ 
     String enteredName1 = edt.toString().trim(); 

     if(enteredName1.length() == 1){ 
      if(et2.getText().toString().trim().length() >= 1) 
       et2.setText(""); 

      radioButton1.setChecked(false); 
      radioButton2.setChecked(false); 

     } 

    }else if(whoHasFocus == 2){ 

     String enteredName2 = edt.toString().trim(); 
     if(enteredName2.length() == 1){ 
      if(et1.getText().toString().trim().length() >= 1) 
       et1.setText(""); 

      radioButton1.setChecked(false); 
      radioButton2.setChecked(false); 
     } 
    } 
} 

當我檢查任何單選按鈕,然後在開始輸入的EditText,單選按鈕越來越未經檢查,但沒有任何內容是第一次進入edittext。如果我輸入下一個字母,那麼它會輸入第二個字母,然後再正常工作。但是當選中單選按鈕時,第一個字母不會被輸入到endittext中。請幫幫我。哪裏出錯了?

+2

那是因爲你調用setChecked(假的),因此onCheckedChanged被調用,因此您的EditText被清除。 – njzk2 2013-02-12 07:46:30

+0

謝謝..我該如何解決這個問題? – user1670443 2013-02-12 09:22:47

+0

quick&dirty:在setChecked(false)之後,執行et .setText(enteredName ); (是1或2) – njzk2 2013-02-12 09:50:57

回答

2

解決

  radioGroup.setOnCheckedChangeListener(null); 
      radioButton1.setChecked(false); 
      radioButton2.setChecked(false); 
      radioGroup.setOnCheckedChangeListener(this); 

而且

et1.removeTextChangedListener(MyActivity.this); 
    et2.removeTextChangedListener(MyActivity.this); 
    et1.setText(""); 
    et2.setText(""); 
    et1.addTextChangedListener(MyActivity.this); 
    et2.addTextChangedListener(MyActivity.this);