当相机活动返回时,承载这个片段的活动有它的onActivityResult被调用。
我的片段开始一个活动的结果与意图发送给相机拍照。图片应用程序加载正常,拍摄照片并返回。然而onActivityResult从未被击中。我设置了断点,但什么都没有触发。一个片段可以有onActivityResult吗?我想是的,因为它是一个已提供的函数。为什么这个没有被触发?
ImageView myImage = (ImageView)inflatedView.findViewById(R.id.image);
myImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 1888);
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if( requestCode == 1888 ) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
((ImageView)inflatedView.findViewById(R.id.image)).setImageBitmap(photo);
}
}
从@Mohit Mehta获得帮助,如果你正在使用导航组件,这可能会帮助你。这对我很有效。
在MainActivity的onActivityResult方法中粘贴以下代码:
for (Fragment fragment : navHostFragment.getChildFragmentManager().getFragments()){
if (fragment != null){
Log.d(TAG, "onResult Has Been Sent!");
fragment.onActivityResult(requestCode, resultCode, data);
}
}
在YOUR FRAGMENT的onActivityResult方法中,你可以得到结果。
希望这对你有所帮助。
我在使用ChildFragmentManager时有同样的问题。管理器不会将结果传递给嵌套片段,您必须在基本片段中手动执行此操作。
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
Fragment fragment = (Fragment) getChildFragmentManager().findFragmentByTag(childTag);
if (fragment != null) {
fragment.onActivityResult(requestCode, resultCode, intent);
}
}
大多数答案都说你必须在你的Fragment的宿主Activity中调用super.onActivityResult(…)。但这似乎对我不起作用。
所以,在你的主机活动中,你应该调用你的片段onActivityResult(…)。这里有一个例子。
public class HostActivity extends Activity {
private MyFragment myFragment;
protected void onActivityResult(...) {
super.onActivityResult(...);
this.myFragment.onActivityResult(...);
}
}
在HostActivity的某些时候,你需要分配这个。你正在使用的片段。或者,使用FragmentManager来获取Fragment,而不是在HostActivity中保留对它的引用。另外,在你尝试调用this.myFragment.onActivityResult(…);;
解决方案1:
调用startActivityForResult(intent, REQUEST_CODE);而不是getActivity()。startActivityForResult(意图,REQUEST_CODE);。
解决方案2:
当startActivityForResult(intent, REQUEST_CODE);调用活动的onActivityResult(requestCode,resultcode,intent),然后你可以从这里调用片段onActivityResult(),传递requestCode,resultcode和intent。