1. 程式人生 > >Android DialogFragment在螢幕旋轉之後,輸入框內的文字消失的原因

Android DialogFragment在螢幕旋轉之後,輸入框內的文字消失的原因

在剛開始學習DialogFragment時,建立了一個測試的DialogFragment:

public class TestDialogFragment extends DialogFragment{


    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState){
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        return builder.setView(R.layout.test_dialog).create();
    }
}

佈局檔案為:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:gravity="center_horizontal"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content">
    <EditText
android:layout_width="wrap_content" android:layout_height="wrap_content"/>
<Button android:text="OK" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>

然後在測試的Activity裡點選按鈕顯示DialogFragment,輸入文字,如圖:

dialogframent

然後旋轉螢幕發現對話方塊沒有消失,但是輸入的資訊卻不見了:

這裡寫圖片描述

沒辦法,只能找原因,看問題出在哪裡。通過對比自己和網上demo的佈局檔案,分析發現:我為了快速測試dialog的效果,寫佈局時並沒有給EditText新增id,這就是問題產生的根本原因。當我加上id之後:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:gravity="center_horizontal"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content">
    <EditText
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button
        android:text="OK"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

再次測試發現輸入的文字就不會消失了。