My MainActivity использует фрагменты, упрощенная версия макета выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".MainActivity">
<fragment
android:name="com.lafave.MyFragment1"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>
<View
android:layout_width="@dimen/divider_width"
android:layout_height="match_parent"
android:background="@android:color/darker_gray" />
<fragment
android:name="com.lafave.MyFragment2"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
Из фрагмента я использую следующий код для запуска собственного приложения камеры:
mRecentPhotoPath = file.getAbsolutePath();
final Uri uri = Uri.fromFile(file);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
Метод onActivityResult моего фрагмента зависит от значения сохраняемого mRecentPhotoPath:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
//mRecentPhotoPath is used here to display the photo.
}
}
Однако, если я повернул устройство во время работы приложения собственной камеры, то будет создан новый экземпляр моего фрагмента иmRecentPhotoPath не будет сохранен.Я думал, что смогу решить эту проблему, реализовав onSaveInstanceState во фрагменте следующим образом:
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
if(mRecentPhotoPath != null) {
outState.putString(RECENT_PHOTO_PATH_ARUGMENT, mRecentPhotoPath);
}
}
Однако, хотя я сохраняю состояние в пакете, когда фрагмент восстанавливается, onCreateView, onActivityCreated и onViewStateRestoredу методов всегда есть нуль для их пакета.Что я делаю не так?
На самом деле это кажется проблемой независимо от камеры.Если я поверну свое приложение (не открыв собственную камеру), то в различных методах, таких как onCreateView, наборы всегда будут нулевыми.