2012-06-02 26 views
11

Yazarken EditText'in içindeki metni değiştirmem gerekiyor: Örnek: "A" düğmesine basılırsa, bir arabelleğe kaydedilip EditText "D" görüntülenir. "D" ye basmış gibi. Şimdi preslenmiş karakteri okuyabilir ama stackoverflow önlemek için et herhangi bir karakter gösteremiyor:EditText - yazarken metni değiştirin

final EditText et = (EditText) findViewById(R.id.editTexts); 
    final TextView tv = (TextView) findViewById(R.id.textView2); 

    et.addTextChangedListener(new TextWatcher() 
    { 
      public void afterTextChanged(Editable s){} 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       if(s.length() > 0) { 
        tv.setText(s.toString().substring(s.length()-1)); 
        et.setText(""); 
       } 
      } 
    }); 
+0

görüyoruz hemen sonra ben metni değiştirmek istediğinizde Gözetmenin kaldırmak ve yeniden kayıt etmek ................... ....... http://stackoverflow.com/questions/9498155/android-java-update-same-edittext-in-textchanged-event –

+0

try s.clear(); textView – Pradeep

+1

aynı soruyu ayarladıktan sonra aynı soruyu iki kez http://stackoverflow.com/questions/10862343/access-edittext-from-textwatcher#10862398 – Ishu

cevap

22

Sen olarak değiştirebilirsiniz Bu bağlantıyı bakın gerekli ::

public class SampleActivity extends Activity { 
    TextWatcher tt = null; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     final EditText et = (EditText) findViewById(R.id.editText1); 
     final TextView tv = (TextView) findViewById(R.id.textView1); 
     tt = new TextWatcher() { 
      public void afterTextChanged(Editable s){ 
       et.setSelection(s.length()); 
      } 
      public void beforeTextChanged(CharSequence s,int start,int count, int after){} 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       et.removeTextChangedListener(tt); 
       et.setText(et.getText().toString().replace("A", "C")); 
       et.addTextChangedListener(tt); 
      } 
     }; 
     et.addTextChangedListener(tt); 
    } 
} 
+0

ve "a", "c" ile değiştirir ancak tersine alanın başlangıcına karakter ekler –

+1

Belki de bir ET.setSelection (s.length()); bir yer! –

7

Metni etkileşimli olarak değiştirmek için, TextWatcher numaralı telefonu kaydetmeniz gerekir. Ancak, izleyicinin içindeki metni değiştirmeye çalışmak, izleyiciye daha fazla çağrı oluşturur. Benim kesmek geçici

mEditText.addTextChangedListener(new TextWatcher() { 
     @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } 
     @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } 
     @Override public void afterTextChanged(Editable editable) { 
      mEditText.removeTextChangedListener(this); 
      mEditText.setText(//TODO change whatever you like here); 
      mEditText.setSelection(editable.length()); //moves the pointer to end 
      mEditText.addTextChangedListener(this); 
     } 
İlgili konular