У меня есть Fragment
, который содержит EditText
и ImageView
, которые необходимо сохранить при изменениях конфигурации, поэтому я попытался сохранить текст и растровое изображение с помощью onSaveInstanceState
.
Но когда яПоверните устройство проблемы запуска.
текст, который я сохранил, перекрываются с подсказкой EditText
, а растровое изображение перекрывается с оригинальным заполнителем ImageView
.
Я пытался сделатьвосстановление различными способами (onCreateView
, onViewCreated
и onViewStateRestored
).Но все еще остается та же проблема.
, поэтому вместо onSaveInstanceState
я использовал setRetainInstance(true)
, и проблема остается с текстом, перекрывающим подсказку в EditText
.
Так, где я сделалнеправильно?И как это решить.
это EditText
:
<EditText
android:id="@+id/username_editext"
android:layout_centerVertical="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/enter_ur_name"
android:inputType="text"
android:lines="1"
android:padding="8dp"/>
и это ImageView
:
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/profile_image"
android:layout_above="@id/username_editext"
android:layout_centerHorizontal="true"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/profile"
/>
и вот коддля сохранения и восстановления через bundle
:
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
if(savedInstanceState != null){
Bitmap map = (Bitmap) savedInstanceState.getParcelable(BITMAP_KEY);
if(map != null)
mProfile.setImageBitmap(map);
String name = savedInstanceState.getString(USERNAME_KEY);
if(name != null)
mUsernameEditext.setText(name);
}
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
if(isPhotoUploaded) {
Bitmap map = ((BitmapDrawable)mProfile.getDrawable()).getBitmap();
outState.putParcelable(BITMAP_KEY, map);
}
if(!mUsernameEditext.getText().toString().trim().equals("")){
outState.putString(USERNAME_KEY , mUsernameEditext.getText().toString());
}
}
Edit 1:
Это полный код макета:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".UsernameFragment">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/profile_image"
android:layout_above="@id/username_text_input_layout"
android:layout_centerHorizontal="true"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/profile"
/>
<android.support.design.widget.TextInputLayout
android:layout_centerVertical="true"
android:id="@+id/username_text_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/enter_ur_name"
>
<EditText
android:id="@+id/username_editext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:lines="1"
android:padding="8dp"/>
</android.support.design.widget.TextInputLayout>
<Button
android:id="@+id/upload_photo_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/upload_photo"
android:layout_centerHorizontal="true"
android:layout_below="@id/username_text_input_layout"/>
<Button
android:id="@+id/next_btn"
android:layout_below="@id/upload_photo_btn"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/next"/>
</RelativeLayout>