这是我的代码层次结构:
活动1 - >>根本活动
Fragment1 - >>在Activity1内
Viewpager - >>在Fragment1里面
Fragment2 - >>由viewpager持有
现在我想从系统gallary中选择一张图片,所以我在Fragment2中使用了startActivityForResult(),但是在Fragment2中永远不能调用onActivityResult()。这是我在fragment2中的代码
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
btnlocalpic.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
OFNFragment.this.startActivityForResult(intent, 1);
}
});
btntakepic_ofn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
OFNFragment.this.startActivityForResult(intent, 2);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
Log.d("yancey", "onActivityResult level3");
Log.i("yancey", "requestCode is: " + requestCode);
switch (requestCode) {
case 1:
Log.i("yancey", "uri is: " + data.getData());
Uri uri = data.getData();
ContentResolver resolver = getActivity().getContentResolver();
try {
Bitmap bitmap = BitmapFactory.decodeStream(resolver.openInputStream(uri));
Intent intent = new Intent(getActivity(), PiceditActivity.class);
intent.putExtra("bitmap", bitmap);
getActivity().startActivity(intent);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
break;
case 2:
if(resultCode == Activity.RESULT_OK){
String sdStatus = Environment.getExternalStorageState();
if(!sdStatus.equals(Environment.MEDIA_MOUNTED)){
Log.i("TestFile", "SD card is not avaiable/writeable right now.");
return;
}
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap)bundle.get("data");
Intent intent = new Intent(getActivity(), PiceditActivity.class);
intent.putExtra("bitmap", bitmap);
startActivity(intent);
}
break;
}
}
希望你们能理解我,请帮助我!
答案 0 :(得分:2)
尝试在parentActivity中放置onActivityResult,如果回调到那时你必须通过从父Activity调用所需Fragment的onActivityResult来手动将结果传递给片段。
如果您能理解这一点,请告诉我这是否有效......或者我将为您提供示例代码..
答案 1 :(得分:1)
嵌套片段似乎不会收到onActivityResult
,不确定它是否是错误或是预期的行为。
你可以做的一件事就是在你的片段中接收onActivityResult
,然后感谢你传递的整数以识别你的请求,你可以通过你的{{{{{{ 1}}。
这应该不是很难:)
希望有所帮助
修改强>
来自here,您可以向ViewPager
和FragmentPagerAdapter
添加方法以获取currentFragment。
ViewPager
在此之后,您可以在public Fragment getActiveFragment(ViewPager container, int position) {
String name = makeFragmentName(container.getId(), position);
return mFragmentManager.findFragmentByTag(name);
}
private static String makeFragmentName(int viewId, int index) {
return "android:switcher:" + viewId + ":" + index;
}
onActivityResult
我已经这样做了,所以我可能会遗漏一些东西:)