Фрагмент исчезает после возвращения из startActivityForResult
У меня странная проблема.
я использую вложенный фрагмент в моем коде,( 4 уровень)
Домой -> Услуги -> ServiceDetails -> Загрузить
в последнем фрагменте ( Upload Fragment) я хочу выбрать изображение из галереи или камеры, поэтому я написал следующий код, чтобы выбрать изображение:
switch (which) {
case galleryItem:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(
Intent.createChooser(intent, “Select Album”,
Home.GALLERY_REQUEST);
break;
case cameraItem:
Intent cameraIntent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent,
Home.CAMERA_REQUEST);
break;
и все в порядке. я могу получить URI из выбранной картинки в onActivityResult
моего фрагмента со следующим кодом:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == Home.GALLERY_REQUEST) {
Uri selectedImageUri = data.getData();
} else if (requestCode == Home.CAMERA_REQUEST) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
Uri cameraUri = getImageUri(
getActivity().getApplicationContext(), photo);
}
}
}
проблема
если я открою свой альбом и прокрутите (см. все миниатюры) в нем, после выбора моей фотографии onActivityResult
вызывается во фрагменте, но фрагмент больше не виден и Home
фрагмент (первый фрагмент) будет виден в моем приложении. но если я открою альбом (от startActivityForResult) и сразу выберу фотографию, все будет хорошо.
У меня нет проблем с камерой.
Я много искал, но не нашел полезных данных, если вы хотите увидеть какую-то часть моего кода, скажите мне. Я не получаю никакого краха, просто я теряю свой последний фрагмент. заранее спасибо.
2 ответа
Моя проблема была решена путем изменения
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(
Intent.createChooser(intent, “Select Album”,
Home.GALLERY_REQUEST);
к:
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, Home.GALLERY_REQUEST);
я не знаю почему, но если кто-нибудь знает, что отличается от начального намерения Intent.createChooser
и нормально позвони скажи спасибо
Явный вызов из фрагмента функции onActivityResult следующим образом
В классе "Родительская активность" переопределите метод onActivityResult() и даже переопределите его в классе фрагментов и вызовите, как показано в следующем коде.
В родительском классе:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane);
fragment.onActivityResult(requestCode, resultCode, data);
}
В детском классе:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//in fragment class callback
}