结果的 startActivity 不会在片段上调用
startActivity for result does not called on fragment
我正在尝试使用开始 Activity 作为结果从图库中挑选照片,但它不会调用片段
我检查了大多数解决方案,但没有一个适合我
请帮助我
newsImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent=new Intent(Intent.ACTION_PICK);
intent.setType("image*//*");
getActivity().startActivityForResult(intent,GALLERY_INTENT);
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==GALLERY_INTENT && resultCode== Activity.RESULT_OK){
Uri uri=data.getData();
StorageReference filePath=mStorage.child("Photos").child(uri.getLastPathSegment());
filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
downloadUri=taskSnapshot.getDownloadUrl();
Picasso.with(getActivity().getApplicationContext()).load(downloadUri).fit().centerCrop().into(newsImg);
Toast.makeText(getActivity().getApplicationContext(),"success",Toast.LENGTH_SHORT).show();
publishBtn.setEnabled(true);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getActivity().getApplicationContext(),"fail",Toast.LENGTH_SHORT).show();
}
});
}
尝试使用它然后找出答案,在给出我的答案之前,我建议您做一些研究或搜索简短形式的确切内容,就像您想要使用 画廊意图一样,只需使用 android 中的 图片选择器 或 android 中的图库 Intent。从片段开始,我们使用 getContext() 而不是像 MainActivity.this.
那样使用 ActivityIntent
为结果调用开始Activity 这样做:
private final int REQUEST_CODE = 1
class ImagePicker extends Fragment{
/*here we are calling the start activity for result
supposing you know how to use the gallery intent so just giving you
the answer what you want */
Intent intent = new Intent(getContext(), YourClass.class);
startActivityForResult(intent, REQUEST_CODE);
}
并且在 onActivityResult() 中,您将在相同的 Fragment 中得到结果,或者在完成此操作后 Activity。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
//get your gallery image uri data here
}
}
希望对您有所帮助,请参阅此 link 以了解更多有关如何在 Activity 中获取数据的信息。
About startAcitivityForResult in android
希望对您有所帮助!谢谢
编辑
由于您的代码对于画廊意图来说似乎没问题,但我认为您的画廊意图存在问题。也试试这个,看看它是否有效。
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, RESULT_CODE;
这里具体我用过inten.setType("image/*")还有一个东西,简单点,不要用getActivity.startActivityForResult() 简单点,startAcitivityForResult() 也可以正常工作并使用 getContext() 尽管执行了 getActivity().getApplicationContext()。尝试修改这些东西,然后告诉我它是否有效!
我正在尝试使用开始 Activity 作为结果从图库中挑选照片,但它不会调用片段
我检查了大多数解决方案,但没有一个适合我 请帮助我
newsImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent=new Intent(Intent.ACTION_PICK);
intent.setType("image*//*");
getActivity().startActivityForResult(intent,GALLERY_INTENT);
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==GALLERY_INTENT && resultCode== Activity.RESULT_OK){
Uri uri=data.getData();
StorageReference filePath=mStorage.child("Photos").child(uri.getLastPathSegment());
filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
downloadUri=taskSnapshot.getDownloadUrl();
Picasso.with(getActivity().getApplicationContext()).load(downloadUri).fit().centerCrop().into(newsImg);
Toast.makeText(getActivity().getApplicationContext(),"success",Toast.LENGTH_SHORT).show();
publishBtn.setEnabled(true);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getActivity().getApplicationContext(),"fail",Toast.LENGTH_SHORT).show();
}
});
}
尝试使用它然后找出答案,在给出我的答案之前,我建议您做一些研究或搜索简短形式的确切内容,就像您想要使用 画廊意图一样,只需使用 android 中的 图片选择器 或 android 中的图库 Intent。从片段开始,我们使用 getContext() 而不是像 MainActivity.this.
那样使用 ActivityIntent为结果调用开始Activity 这样做:
private final int REQUEST_CODE = 1
class ImagePicker extends Fragment{
/*here we are calling the start activity for result
supposing you know how to use the gallery intent so just giving you
the answer what you want */
Intent intent = new Intent(getContext(), YourClass.class);
startActivityForResult(intent, REQUEST_CODE);
}
并且在 onActivityResult() 中,您将在相同的 Fragment 中得到结果,或者在完成此操作后 Activity。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
//get your gallery image uri data here
}
}
希望对您有所帮助,请参阅此 link 以了解更多有关如何在 Activity 中获取数据的信息。
About startAcitivityForResult in android
希望对您有所帮助!谢谢
编辑
由于您的代码对于画廊意图来说似乎没问题,但我认为您的画廊意图存在问题。也试试这个,看看它是否有效。
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, RESULT_CODE;
这里具体我用过inten.setType("image/*")还有一个东西,简单点,不要用getActivity.startActivityForResult() 简单点,startAcitivityForResult() 也可以正常工作并使用 getContext() 尽管执行了 getActivity().getApplicationContext()。尝试修改这些东西,然后告诉我它是否有效!