Java 来自适配器内部片段的startActivityForResult
我有一个片段,我在里面填了一个回收视图,一个帖子里有一个摄像头,我需要在拍照时记录下它带来的信息。我不知道怎么做 请帮忙 这是mi代码: PostAdapter.javaJava 来自适配器内部片段的startActivityForResult,java,android,android-fragments,android-camera,Java,Android,Android Fragments,Android Camera,我有一个片段,我在里面填了一个回收视图,一个帖子里有一个摄像头,我需要在拍照时记录下它带来的信息。我不知道怎么做 请帮忙 这是mi代码: PostAdapter.java public HeaderViewHolder (View itemView) { super (itemView); this.mCamera = (ImageView) itemView.findViewById(R.id.ivCamera); mCamera
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());
}
}
});
}
@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);
}
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("Result in fragment",":D");
}
MainActivity.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());
}
}
});
}
@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);
}
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("Result in fragment",":D");
}
MyFragment.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());
}
}
});
}
@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);
}
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("Result in fragment",":D");
}
使用getFragmentById()或getFragmentByTag()方法之一获取对片段的引用将片段传递到PostAdapter的构造函数中
class PostAdapter {
private Fragment fragment;
public PostAdapter(Fragment fragment) {
this.fragment = fragment;
}
}
然后在里面点击
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());
}
}
});
您可以通过以下方式获得您拍摄的照片的信息 在你的片段中
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
}
更多信息片段id放在哪里?当您创建一个片段时,您可以这样做===>事务。替换(R.id.content,fragmetTAg);commit();然后,您可以使用getFragmentByTag()获取片段的实例。您还需要从活动中删除
onActivityResult
覆盖。FragmentActivity
类(或AppCompatActivity
如果使用v7)已为您处理此问题。我试图将片段传递给适配器,但显示错误。!:(,“final Fragment homeGcFragment_=new Fragment();”--“mrecycergcpost.setAdapter(new PostHeaderAdapter(getActivity().getApplicationContext(),data,homeGcFragment_));”在Fragment类中,您是否调用了PostAdapter=new PostAdapter(this);mrecycergcpost.setAdapter(new PostHeaderAdapter(getActivity().getApplicationContext(),data,this));以下错误“Fragment HomeGcFragment_u{56503bd}未附加到活动”您好!此代码在“Bundle extras=data.getExtras”中引发了一个异常,一个错误,对象为nullShow此方法体,mCameraPhoto.takePhotoIntent()请。是一个库,而不是有体!是否使用此库?是的,完全正确。PhotoUtil!