0

У меня странная проблема.Фрагмент исчезает после возвращения из 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. , но если я открою альбом (поначалуActivityForResult) и сразу же выберите фотографию, все будет хорошо.

У меня нет проблем с камерой.

Я много искал, но не нашел полезных данных, , если вы хотите, чтобы какая-либо часть моего кода сообщила мне. Я не получаю никакого сбоя, просто я теряю свой последний фрагмент. благодарит заранее.

ответ

1

моя проблема была решена путем изменения

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 и обычно звоните, скажите мне, спасибо

+0

Та же проблема, с которой я столкнулся, Intent.createChooser использовать при вызове и слиянии нескольких намерений. – Piyush

0

Явный вызова из фрагмента onActivityResult функции следующим образом

В родительском классе активности, переопределить метод onActivityResult(), и даже переопределить то же самое в Fragment классе и называют в качестве следующего кода.

В родительском классе:

@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 
    } 
+0

спасибо за ответ, но, как я сказал в своем ответе, у меня нет проблем с получением данные из 'onActivityResult', –

+0

- общая проблема для вложенных фрагментов. поэтому вы можете управлять вызовом фрагментов или отображать фрагмент, который вы хотите в дочернем классе. Конечно, это взломать, но теперь это должно сделать трюк. Кроме того, я пытаюсь поставить такой же код, поэтому я буду обновлять вас, как только я нахожу актуационное решение. –

+0

Я не понимаю, значит, я должен открыть весь фрагмент ребенка в коде? как в onResume проверять одно булево значение и открытый фрагмент желания? –

Смежные вопросы