1. 程式人生 > >Fragment關閉再開啟 控制元件儲存值的問題 尤其是EditText 儲存原來值的解決辦法

Fragment關閉再開啟 控制元件儲存值的問題 尤其是EditText 儲存原來值的解決辦法

今天解決了一個自認為比較棘手的bug。特別記錄在此。

背景: 該介面是一個fragment,fragment中有一個EditText控制元件。出現的問題是,我第一次進入該fragment,

在edittext控制元件輸入內容,然後返回到該fragemnt之前的介面,

接著再次返回到該fragmen介面時,之前在edittext中輸入的內容又重新出現在該edittext中。很是奇葩!!!

解決方法:經過數小時的打log,debug之後,本人發現在fragment的生命週期中,如果你只是退出該fragment,

而沒有銷燬之。fragment會在其生命週期的onViewStateRestored()中,

會重新給edittext控制元件 setText(),並賦上原來的內容。也就是說,fragment自己儲存了控制元件的一些狀態和屬性資訊。

如果你不想保留原來的值,最好覆寫onViewStateRestored()方法,

並在其呼叫super.onViewStateRestored()之前,搶先呼叫edittext的setText()方法,亦即覆蓋掉fragment中儲存的edittext的內容。如下所示:

@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
    if (mSearchEdit != null) {
        mSearchEdit.setText("");
    }
    super.onViewStateRestored(savedInstanceState);
}

轉載地址:https://blog.csdn.net/ruingman/article/details/52217531

個人GitHub賬號:https://github.com/HuaDanJson