Фрагмент исчезает после возвращения из 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
    }
Другие вопросы по тегам