我一直試圖用EditText獲取特定的行爲。 這是我啓用了旋轉的簡單活動。當我輸入一些文字時,會觸發 onTextChanged
方法。在orientationChange上觸發OnTextChanged,即使在onCreate方法後設置了TextWatcher方法
當我旋轉手機時,不應觸發此方法,因爲onInstanceState
中已保存的文本已被設置爲onCreate
方法中的EditText
。
但是,當我將手機旋轉回原來的方向時,方法會再次觸發!看到這篇文章末尾的logcat。
這是一個來自新創建的Android Studio項目的複製和粘貼代碼。
public class MainActivity extends AppCompatActivity {
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.search_query);
}
@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
editText.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) {
Log.d("MainActivity", "charSequence:" + charSequence);
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
}
UPD:
的Android保持在默認情況下每個方向的變化在所有領域的EditText文本(具有唯一的ID)。這就是爲什麼當我旋轉我的手機時觸發onTextChanged。爲了避免這種情況,我在onCreate之後放置了onTextChanged監聽器,因此它將在文本設置爲EditText後監聽事件。但它不像預期的那樣工作(logcat)。檢查的最後一個環節以獲得更多信息
的logcat:
D/MainActivity: onCreate
D/MainActivity: charSequence:a //entered manually
D/MainActivity: charSequence:a // triggered on orientation change
D/MainActivity: onDestroy
D/MainActivity: onCreate
D/MainActivity: onDestroy
D/MainActivity: onCreate
D/MainActivity: onDestroy
D/MainActivity: onCreate
D/MainActivity: onDestroy // no callback so far
D/MainActivity: onCreate
D/MainActivity: charSequence:ba // entered manyally
D/MainActivity: onDestroy
D/MainActivity: onCreate
D/MainActivity: charSequence:ba // when came back to original "ba" orientation
D/MainActivity: onDestroy
D/MainActivity: onCreate
相關: TextWatcher called even if text is set before adding the watcher
Android retain callback state after configuration change
「...保存在onInstanceState中的文本已經在onCreate方法中設置爲EditText」我在代碼中看不到它。 –
@WilliMentzel它由android系統設置。我認爲這個屬性叫做freezesText。檢查第二個鏈接 –
請參閱更新的答案。 –