2015-12-08 12 views
5

Come ottenere l'immagine da gallary per impostare in Imageview in frammento? Non onActivityResult chiamato fragment..this il codice che ho scritto nel frammentoOttieni l'immagine dalla galleria per impostarla in immagine in frammento?

img_user.setOnClickListener(new View.OnClickListener() { 
      @Override 
     public void onClick(View v) { 

      Intent i = new Intent(Intent.ACTION_PICK, 
        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(i, RESULT_LOAD_IMAGE); 


     } 
    }); 


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


     if (data != null) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = getContext().getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 

      cursor.moveToFirst(); 
      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      img_user.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
      cursor.close`enter code here`(); 
     } else { 
      Toast.makeText(getActivity(), "Try Again!!", Toast.LENGTH_SHORT) 
        .show(); 
     } 

    } 
+0

Si prega di fornire più contesto. Cosa non funziona come ti aspettavi? –

+0

startActivityForResult funziona in Fragment @Niral – Hits

risposta

3

È possibile farlo in questo modo .... nella vostra attività principale

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     //call super 
     super.onActivityResult(requestCode, resultCode, data); 
    } 

e dentro il vostro frammento

Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       // ******** code for crop image 
       i.putExtra("crop", "true"); 
       i.putExtra("aspectX", 100); 
       i.putExtra("aspectY", 100); 
       i.putExtra("outputX", 256); 
       i.putExtra("outputY", 356); 

       try { 

        i.putExtra("return-data", true); 
        startActivityForResult(
          Intent.createChooser(i, "Select Picture"), 0); 
       }catch (ActivityNotFoundException ex){ 
        ex.printStackTrace(); 
       } 

e

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(requestCode==0 && resultCode == Activity.RESULT_OK){ 
      try { 
       Bundle bundle = data.getExtras(); 
       Bitmap bitmap = bundle.getParcelable("data"); 
       img_user.setImageBitmap(bitmap); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

funziona perfettamente per me

0

Si prega di trovare il seguente codice, funzionerà. Aggiungi questo nel tuo frammento

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 

//Your stuff 

} 
+0

Questo non funzionerebbe –

+0

@ViktorYakunin perché, puoi dirmelo? –

+0

nella domanda originale si afferma che questo non funziona. Ho affrontato questo problema prima, devi passare il codice di richiesta> 0, se non è stato d'aiuto, trovare il tuo frammento in Attività e chiamare esplicitamente suActivityResult. –

1

Anche io stavo affrontando lo stesso problema. In realtà la richiamata per startActivityForResult() sta tornando all'attività padre, quindi è necessario effettuare la chiamata esplicita da frammento alla funzione onActivityResult() dal frammento alla funzione onActivityResult() seguente.

Nella classe Attività padre, eseguire l'override del metodo onActivityResult() e persino sovrascrivere lo stesso in Fragment Class e chiamare come il codice seguente.

In classe genitore:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Fragment fragment = getFragmentManager().findFragmentById(R.id.container); 
    fragment.onActivityResult(requestCode, resultCode, data); 
} 

in classe bambini: che si estende frammento eseguire la logica per l'impostazione immagine sul ImageView.

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 



     if (data != null) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null); 

       cursor.moveToFirst(); 
       int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
       String picturePath = cursor.getString(columnIndex); 
       image.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 

       cursor.close(); 
      } else { 
       Toast.makeText(getActivity(), "Try Again!!", Toast.LENGTH_SHORT).show(); 
      } 
      super.onActivityResult(requestCode, resultCode, data); 
     } 
+1

Questo codice mi aiuta. Spero che risolva il tuo problema. ho preso aiuto da http://stackoverflow.com/questions/6147884/onactivityresult-not-being-called-in-fragment –

Problemi correlati