2017-05-03 20 views
0

私は最初のEditTextの値を入力すると2つのEditText値があり、2番目のEditTextの値も2番目のEditTextに表示されます。 2番目の編集テキストの値が表示されていない、アプリケーションが応答していません。TextWatcherを追加して別の編集テキストから削除した後に複数回試しましたが、問題を解決できませんでした。androidのEditText再帰問題を解決するには

etuptext.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) { 
      et_bottom.setText(charSequence.toString()); 
     } 

     @Override 
     public void afterTextChanged(Editable editable) { 

     } 
    }); 

    et_bottom.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) { 


      // etuptext.setText(charSequence.toString()); 

     } 

     @Override 
     public void afterTextChanged(Editable editable) { 

     } 
    }); 
+0

ポストスタックトレース – FAT

+0

私は解決策は、テキストが実際に変更されたかどうかを確認することだと思います。 – jobbert

+0

テキストを直接設定するのではなく、テキストを追加してみてください。これはあなたの目的を解決するかもしれません。両方のフィールドで値を同時に表示したい場合。 – MobileEvangelist

答えて

1

使用ビューhasFocus()方法は、他のEditTextにフォーカスがある乗り切るチェックします。そうでない場合は、テキストを設定します。ここで

は、作業コードです:

etuptext.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) { 

     if (!et_bottom.hasFocus()) 
      et_bottom.setText(charSequence.toString()); 
    } 

    @Override 
    public void afterTextChanged(Editable editable) { 

    } 
}); 

et_bottom.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) { 

     if (!etuptext.hasFocus()) 
      etuptext.setText(charSequence.toString()); 
    } 

    @Override 
    public void afterTextChanged(Editable editable) { 

    } 
}); 
+0

あなたのコードは完全に機能しています。 –

+0

非常に非常にありがたい@Ferdous Ahamed –

+0

あなたを助けて嬉しい:)私の答えが役に立つと思われる場合upvoteを与えてください。事前に感謝 – FAT

0

こんにちはあなたがチェックする必要がありますのEditTextを反映しているフォーカスすべきではないです。

etuptext.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) { 
      if(!et_bottom.hasFocus()) 
      et_bottom.setText(charSequence.toString()); 
     } 

     @Override 
     public void afterTextChanged(Editable editable) { 

     } 
    }); 

    et_bottom.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) { 

     if(!etuptext.hasFocus()) 
      etuptext.setText(charSequence.toString()); 

     } 

     @Override 
     public void afterTextChanged(Editable editable) { 

     } 
    }); 

もう一つ、すべてのこの出来事あなたがのEditTextにテキストを設定しようとしたとき、それはアプリがモードを応答しないになっているようにフォーカスを要求して焦点と書き込み1で2つ目の意志を得たので。

+0

あなたのコードと私のコードの違いは何ですか?私はすでにこれに答えました。 – FAT

+0

投稿の違いは投稿の一番下にある説明です。 – MobileEvangelist

0

テキストを設定する前にTextWatchersを削除します。テキストを設定したら、TextWatcherをもう一度追加します。擬似コードで

TextWatcher edittext1watcher = null; 
TextWatcher edittext2watcher = null; 

edittext1watcher = new TextWatcher() { 
... 
    public void onTextChanged(.....) { 
     edittext2.removeTextChangedListener(edittext2watcher); 
     edittext2.setText(...); 
     edittext2.addTextChangedListener(edittext2watcher); 
    } 
}; 
edittext2watcher = new TextWatcher() { 
... 
    public void onTextChanged(.....) { 
     edittext1.removeTextChangedListener(edittext1watcher); 
     edittext1.setText(...); 
     edittext1.addTextChangedListener(edittext1watcher); 
    } 
}; 

edittext1.addOnTextChangedListener(edittext1watcher); 
edittext2.addOnTextChangedListener(edittext2watcher);