2017-05-22 3 views
2

J'ai un fragment et j'ai rempli un RecyclerView, un poste contient un appareil photo et j'ai besoin de prendre les informations qu'il apporte lorsque je prends la photo. Je ne sais pas comment le faire.startActivityForResult de l'adaptateur à l'intérieur du fragment

Aidez-nous s'il vous plaît.

ce code est mi:

PostAdapter.java

 public HeaderViewHolder (View itemView) { 
     super (itemView); 
     this.mCamera = (ImageView) itemView.findViewById(R.id.ivCamera); 
     mCameraPhoto = new CameraPhoto(itemView.getContext()); 
     this.mCamera.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       try{ 
        ((Activity) v.getContext()).startActivityForResult(mCameraPhoto.takePhotoIntent(), CAMERA_REQUEST_ASIST); 
       }catch (Exception e){ 
        Log.e("Error camera permission", e.getMessage()); 
       } 
      } 
     }); 
    } 

MainActivity.java

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    String photoPath = mCameraPhoto.getPhotoPath(); 
    for (Fragment fragment : getSupportFragmentManager().getFragments()) { 
     fragment.onActivityResult(requestCode, resultCode, data); 

     Log.d("Result in fragment",":D --> "+photoPath); 
    } 

} 

MyFragment.java

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.d("Result in fragment",":D"); 
} 

Répondre

0

Utilisez l'une des méthodes getFragmentById() ou getFragmentByTag() pour obtenir la référence à votre fragment

+0

où placer le fragment id? –

+0

Lorsque vous créez un fragment, vous le faites comme ceci =====> transaction.replace (R.id.content, fragment, "fragmetTAg"); transaction.commit(); Ensuite, vous pouvez obtenir une instance du fragment en utilisant getFragmentByTag() –

2

fragment passe dans le constructeur de PostAdapter.

class PostAdapter { 
    private Fragment fragment; 

    public PostAdapter(Fragment fragment) { 
     this.fragment = fragment; 
    } 
} 

puis à l'intérieur onclick

this.mCamera.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      try{ 
       fragment.startActivityForResult(mCameraPhoto.takePhotoIntent(), CAMERA_REQUEST_ASIST); 
      }catch (Exception e){ 
       Log.e("Error camera permission", e.getMessage()); 
      } 
     } 
    }); 
+0

Vous devez également supprimer le remplacement 'onActivityResult' de votre activité. La classe 'FragmentActivity' (ou' AppCompatActivity' si vous utilisez v7) gère déjà cela pour vous. –

+0

Je tente de passer le fragment à l'adaptateur, mais montre une erreur. :("Fragment final homeGcFragment_ = new Fragment();" - "mRecyclerGCPost.setAdapter (nouveau PostHeaderAdapter (getActivity(). getApplicationContext(), données, homeGcFragment_));" –

+1

dans la classe de fragment, avez-vous appelé l'adaptateur PostAdapter = new PostAdapter (this); – Denominator

0

Vous pouvez obtenir les informations de la photo que vous avez pris comme suit.

Dans votre fragment

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(resultCode == RESULT_OK){ 
      if(requestCode == CAMERA_REQUEST_ASIST){ 
       String photoPath = mCameraPhoto.getPhotoPath(); 
       try { 
        // Update data in your Custom RecyclerView Adapter 
        // and call notifyDatasetChanged 

       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } 
      } 
     }//end if resultCode 
    } 

Et plus d'informations https://github.com/kosalgeek/PhotoUtil/blob/master/README.md

+0

HI! ce code lance une exception, une erreur dans "Bundle extras = data.getExtras", l'objet est null –

+0

Afficher le corps de cette méthode, mCameraPhoto.takePhotoIntent() s'il vous plaît. – Sunhee

+0

Est une bibliothèque, pas de corps! –