簡體   English   中英

設備旋轉后,提示文本在EditText中變為真實文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM