[英]hint text turns to real text in EditText after device rotation
我有一些提示文本的EditText視圖。
當設備旋轉時,提示變為真實文本。
如果用戶之前寫過一些文本-它會被覆蓋。
如何更改行為? 阻止提示變成文本?
這與跨輪換保存數據有關。 基本上,您的數據在旋轉時被破壞。
要解決此問題,您需要保存跨運行時配置更改(在這種情況下為輪換)的數據。
一種方法是覆蓋Activity中的onSaveInstanceState(Bundle outState)
。
我上面描述的方法在onPause()
onStop()
和onDestroy()
之前被調用
從一本好書中我讀到:
onSaveInstanceState(...)的默認實現要求所有活動的視圖將其狀態另存為Bundle對象中的數據。 捆綁包是一種將字符串鍵映射到某些有限類型的值的結構,您之前已經看到過該捆綁包。 它被傳遞給onCreate(Bundle)
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // }
當您覆蓋onCreate(…)時,您將在活動的超類上調用onCreate(…),並傳遞剛收到的捆綁軟件。 在超類實現中,將檢索視圖的保存狀態,並將其用於重新創建活動的視圖層次結構。
這是很酷的部分。
您將需要重寫onSavedInstanceState,以將其他數據保存到包中,然后在onCreate()
方法中讀取該數據。
因此,無論您想在輪換期間保存任何數據,都需要將該數據添加到此捆綁包中。
那樣做..
添加一個常量,該常量將用作將存儲在分發包中的鍵。
private static final String MY_KEY = "My Key";
然后重寫onSaveInstanceState()
以將常量MY_KEY
作為鍵將數據值寫入捆綁中。
@Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); savedInstanceState.putInt(MY_KEY, YOUR DATA THAT YOU KEEP LOSING ON ROTATION GOES HERE!!!!!); }
最后在onCreate
檢查該值,如果存在,則將其分配給您的變量。
if (savedInstanceState != null) { TheTextThatYouKeepLosing = savedInstanceState.getInt(MY_KEY, 0); }
如果您做的方式與我相同,可能會有所幫助,並發布答案以進行一些格式化。
我有完全一樣的問題。 我正在將fragment
添加到onCreate
activity
中,如下所示
fragmentTransaction.add(R.id.fragment, fragment, tag);
因此,每當我旋轉設備時,設備都面臨與您提到的完全相同的問題,然后我仔細檢查了一下,發現每個旋轉片段上都添加了這個問題。
在我的情況下,解決方案是將add
replace
如下所示。 做完這個問題后就解決了。
fragmentTransaction.replace(R.id.toDoFragment, fragment, tag);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.