2012-01-12 14 views
27

Tengo un problema con la importación de una imagen desde el álbum en Android, porque nunca se llama al método onActivityResult().onActivityResult() no se ha llamado cuando la actividad comenzó desde el fragmento

Este es el código que he escrito (llamado desde no un fragmento de una actividad):

Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
getActivity().startActivityForResult(galleryIntent, PICK_IMAGE); 

Y, por cierto, he definido el onActivityResult() pero nunca ha disparado:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.d(TAG, "onActivityResult"); // not printed 
} 

¿Alguna idea de lo que está mal con esto?

Gracias!

+3

añadir constructor, super.onActivityResult (requestCode, resultCode, datos); – Venky

+0

He editado la pregunta, de hecho mi código ya tiene esa línea. –

+0

Necesita seleccionar la imagen de la galería ¿verdad? – Venky

Respuesta

111

Tener onActivityResult() llamada en el fragmento, debe llamar a la versión del fragmento de startActivityForResult(), no la actividad de. Así que en el código de su fragmento, reemplace

getActivity().startActivityForResult(galleryIntent, PICK_IMAGE); 

con

startActivityForResult(galleryIntent, PICK_IMAGE); 
+8

Tan fácil de cometer ese error al convertir Actividades en Fragmentos :-) – Kuffs

+2

WOW funcionó :) bueno, siempre usamos getActivity() en fragmentos :) ayúdame mucho – Javier

+1

esta debería ser la respuesta correcta, el otro método de llamar a un método dentro de tu fragmento es una solución – irwinb

-2

probar este Fragmento:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); 
    intent.setType("image/*"); 
    intent.putExtra("return-data", true); 
    startActivityForResult(intent, 1); 


    @Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 

     case 1: 
      if(requestCode == 1 && data != null && data.getData() != null){ 
       Uri _uri = data.getData(); 

       if (_uri != null) { 
        Cursor cursor = getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null); 
        cursor.moveToFirst(); 
        final String imageFilePath = cursor.getString(0); 
        File photos= new File(imageFilePath); 
        imageView.setImageBitmap(bitmap); 
        cursor.close(); 
       } 
      } 
      super.onActivityResult(requestCode, resultCode, data); 
     } 
    } 
+6

por qué usted llama "super.onActivityResult (requestCode, resultCode, data);" dos veces ??! –

16

Con este código:

Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
getActivity().startActivityForResult(galleryIntent, PICK_IMAGE); 

El onActivityResult debe estar en la actividad que contiene el fragmento. Desde allí puede llamar a cualquier método del fragmento, no en el fragmento.

MyFragment myFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.fragment); 
myFragment .onCameraResult(requestCode, resultCode, intent); 

que hacer allí lo que quiera

+1

¡No puedo creer que no lo haya visto antes! Gracias :) –

Cuestiones relacionadas