2014-10-08 1 views
3

Это мой код для вызова результата onactivity. Я использую диалоговое окно, в котором предлагается выбрать изображение из галереи или с камеры. Тот же код работает в действии, но не работает в фрагментах. Я пробовал все предыдущие ответы на stackoverflow. Пожалуйста, помогитеAndroid onactivityresult() не вызывается во фрагменте

AlertDialog.Builder builder = new AlertDialog.Builder(
         getActivity()); 

       builder.setTitle("Choose Image Source"); 
       builder.setItems(new CharSequence[] { "Pick from Gallery", 
         "Take from Camera" }, 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, 
            int which) { 
           switch (which) { 
           case 0: 

            Intent intent = new Intent(
              Intent.ACTION_PICK, 
              android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI); 

            intent.putExtra("crop", "true"); 
            intent.putExtra("aspectX", 1); 
            intent.putExtra("aspectY", 1); 
            intent.putExtra("outputX", 250); 
            intent.putExtra("outputY", 250); 

            try { 

             intent.putExtra("return-data", true); 
             startActivityForResult(
               Intent.createChooser(
                 intent, 
                 "Complete action using"), 
               PICK_FROM_GALLERY); 

            } catch (ActivityNotFoundException e) { 

            } 

            break; 

           case 1: 

            Intent takePictureIntent = new Intent(
              MediaStore.ACTION_IMAGE_CAPTURE); 
            if (takePictureIntent 
              .resolveActivity(getActivity() 
                .getPackageManager()) != null) { 

             startActivityForResult(
               takePictureIntent, 
               PICK_FROM_CAMERA); 

            } 

            break; 

           default: 
            break; 
           } 
          } 
         }); 
       builder.show(); 





public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 

    try { 
     if (requestCode == PICK_FROM_GALLERY) { 
      System.out.print("ho ja please"); 
      Bundle extras2 = data.getExtras(); 
      if (extras2 != null) { 
       bitmap = extras2.getParcelable("data"); 

       Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
         bitmap.getHeight(), Config.ARGB_8888); 


       dp.setImageBitmap(output); 


      } 
     } 

     if (requestCode == PICK_FROM_CAMERA) { 

      Bundle extras = data.getExtras(); 
      Bitmap bitmap1 = (Bitmap) extras.get("data"); 

      bitmap = Bitmap.createScaledBitmap(bitmap1, 250, 250, true); 

      Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
        bitmap.getHeight(), Config.ARGB_8888); 

      dp.setImageBitmap(output); 



     } 
+0

Я попытался ур код и его отлично работает для меня. Где вы написали этот код, только в фрагменте? –

+0

Да только в фрагменте – Madhav

+0

Я использовал ур оповещение в oncreateview и отмечен. Он работает отлично. Вы можете опубликовать код фрагмента –

ответ

0

Вы можете попробовать с помощью вызова startActivityForResult с контекстом активность т.е.

getActivity().startActivityForResult(Intent.createChooser(
                 intent, 
                 "Complete action using"), 
               PICK_FROM_GALLERY); 

Я использую следующий код для показа изображения Picker, проверить это, если это поможет вам -

private static final int SELECT_PICTURE = 1; // Declare this variable 

Intent pickIntent = new Intent(); 
       pickIntent.setType("image/*"); 
       pickIntent.setAction(Intent.ACTION_GET_CONTENT); 

       Intent takePhotoIntent = new Intent(
         MediaStore.ACTION_IMAGE_CAPTURE); 

       String pickTitle = "Select or take picture"; 

       // strings.xml 
       Intent chooserIntent = Intent.createChooser(pickIntent, 
         pickTitle); 
       chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, 
         new Intent[] { takePhotoIntent }); 

       getActivity().startActivityForResult(chooserIntent, 
         SELECT_PICTURE); 

Затем в вашей деятельности вы можете использовать это -

protected void onActivityResult(int requestCode, int resultCode, 
      Intent imageReturnedIntent) { 
     super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
     if (imageReturnedIntent != null) { 
      if (imageReturnedIntent.getData() != null) { 
       Uri selectedImage = imageReturnedIntent.getData(); // use this URI for getting and updating the fragment 


      } 
     } 
    } 
+0

попробовал это. НЕ РАБОТАЕТ :( – Madhav

+0

Когда вы используете getActivity(). StartActivityForResult, то onActiivtyResult должен находиться в Activity, а не в Fragment, потому что код запроса в действии поступает корректно, но не в фрагменте. –

+1

попробуйте добавить - super.onActivityResult (requestCode, resultCode, intent); как ваша первая строка метода –

0

Это связано с тем, что в диалоговом окне alert вызывается Activity.startActivityForResult вместо Fragment.startActivityForResult. Если вы хотите исправить это поведение, используйте ссылку на фрагмент внутри вашего диалога, чтобы вызвать startActivityForResult.

UPD: Также, как упоминалось @Ashish Tamrakar не забудьте вызвать super.onActivityResult внутри метода Activity.onActivityResult если переопределить