32

とのフラグメントがあり、EditTextその中onCreateView()にaを追加TextWatcherEditTextます。

フラグメントが2回追加されるたびafterTextChanged(Editable s)に、テキストが変更されることなくコールバックが呼び出されます。

コードスニペットは次のとおりです。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
    myEditText = (EditText) v.findViewById(R.id.edit_text);
    myEditText.addTextChangedListener(textWatcher);
...
}

TextWatcher textWatcher = new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        searchProgressBar.setVisibility(View.INVISIBLE);
    }

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

    }

    @Override
    public void afterTextChanged(Editable s) {
        Log.d(TAG, "after text changed");
    }
}

また、フラグメントをその状態を保持するように設定し、フラグメントのインスタンスをアクティビティに保持します。

4

2 に答える 2

65

編集されたソリューション:

フラグメントがビューの以前の状態を復元したため、フラグメントが2回目に添付されたときからテキストが変更されたようです。

が呼び出される前に状態が復元されtext watcherたため、私の解決策は に を追加することでした。onResume()onResume

@Override
public void onResume() {
    super.onResume();
    myEditText.addTextChangedListener(textWatcher);
}

編集 @MiloszTylenda がコメントで述べたように、 のリークを避けるためTextwatcherに、コールバックで を削除することをお勧めします。onPause()Textwatcher

@Override public void onPause() {
  super.onPause();
  myEditText.removeTextChangedListener(watcher);
}
于 2012-12-05T12:34:27.577 に答える