1

次の問題があります。

フラグメント内に FragmentTest と言うと、次のスレッドがあります。

new Thread(new Runnable() {
    public void run() {
    ...
        if (condition) {
             if (isAdded()) {
        getActivity.runOnUiThread(new Runnable () {
    public void run() {           
             rightEditText.addTextChangedListener(FragmentTest.this);} } 
          }
        }
       }
    ...
    }
}).start;

onCreate メソッドの内部。

FragmentTest は TextWatcher インターフェイスを実装しますが、インターフェイス メソッドは呼び出されません。

4

2 に答える 2

1

コメントを回答に移行する:

なぜ別のスレッド内でこれを行う必要があるのですか? 問題は、すべての UI コンポーネントがメインの UI スレッドで実行されることだと思います。スレッドなしで試してみてください。

ここではこれ以上の説明は必要ないと思います。OP は彼のコードを UI スレッドに移行し、機能しました。

于 2016-06-29T16:32:54.253 に答える
1
public class MainActivity extends AppCompatActivity implements TextWatcher {
EditText edttext;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
   
    edttext = (EditText) findViewById(R.id.editText);
    edttext.addTextChangedListener(this);
}


@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
  runOnUiThread(new Runnable() {
      @Override
      public void run() {
         Toast.makeText(MainActivity.this,"change",Toast.LENGTH_SHORT).show();
      }
  });
}

@Override
public void afterTextChanged(Editable editable) {

}

}

于 2016-06-29T16:24:26.040 に答える