Android 无法对嵌入在另一个片段中的片段调用OnActivityResult()方法
这是我的代码层次结构:Android 无法对嵌入在另一个片段中的片段调用OnActivityResult()方法,android,android-fragments,Android,Android Fragments,这是我的代码层次结构: Activity1->>根活动 碎片1->>内部活动1 Viewpager->>内部片段1 片段2->>通过viewpager保持 现在我想从system gallary中选择一张图片,所以我在Fragment2中使用startActivityForResult(),但在Fragment2中永远不能调用onActivityResult()。这是我的代码片段2 @Override public void onActivityCreated(Bundle savedI
Activity1->>根活动
碎片1->>内部活动1
Viewpager->>内部片段1
片段2->>通过viewpager保持
现在我想从system gallary中选择一张图片,所以我在Fragment2中使用startActivityForResult(),但在Fragment2中永远不能调用onActivityResult()。这是我的代码片段2
@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;
}
}
希望你们能支持我,请帮帮我 嵌套片段似乎不会在ActivityResult上接收到
,不确定这是错误还是预期行为
您可以做的一件事是在片段一中接收onActivityResult
,然后感谢您传递的整数来识别您的请求,您可以通过查看页面
从父片段调用方法到子片段
这应该不是很难做到:)
希望能有帮助
编辑
从中获取,您可以向FragmentPagerAdapter
和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中执行以下操作
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == 1) //Here you SHOULD know that is from your childfragment
{
Fragment page = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + container.getCurrentItem());
// based on the current position you can then cast the page to the correct
// class and call the method:
if (container.getCurrentItem() == 0 && page != null) {
((MyChildFragment)page).callMethod(data);
}
}
}
我已经记下了这一点,所以我可能遗漏了一些东西:)嵌套片段似乎不会在ActivityResult上接收到,不确定这是一个bug还是预期的行为
您可以做的一件事是在片段一中接收onActivityResult
,然后感谢您传递的整数来识别您的请求,您可以通过查看页面
从父片段调用方法到子片段
这应该不是很难做到:)
希望能有帮助
编辑
从中获取,您可以向FragmentPagerAdapter
和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中执行以下操作
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == 1) //Here you SHOULD know that is from your childfragment
{
Fragment page = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + container.getCurrentItem());
// based on the current position you can then cast the page to the correct
// class and call the method:
if (container.getCurrentItem() == 0 && page != null) {
((MyChildFragment)page).callMethod(data);
}
}
}
我已经记下了这一点,所以我可能遗漏了一些东西:)嵌套片段似乎不会在ActivityResult上接收到,不确定这是一个bug还是预期的行为
您可以做的一件事是在片段一中接收onActivityResult
,然后感谢您传递的整数来识别您的请求,您可以通过查看页面
从父片段调用方法到子片段
这应该不是很难做到:)
希望能有帮助
编辑
从中获取,您可以向FragmentPagerAdapter
和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中执行以下操作
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == 1) //Here you SHOULD know that is from your childfragment
{
Fragment page = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + container.getCurrentItem());
// based on the current position you can then cast the page to the correct
// class and call the method:
if (container.getCurrentItem() == 0 && page != null) {
((MyChildFragment)page).callMethod(data);
}
}
}
我已经记下了这一点,所以我可能遗漏了一些东西:)嵌套片段似乎不会在ActivityResult上接收到,不确定这是一个bug还是预期的行为
您可以做的一件事是在片段一中接收onActivityResult
,然后感谢您传递的整数来识别您的请求,您可以通过查看页面
从父片段调用方法到子片段
这应该不是很难做到:)
希望能有帮助
编辑
从中获取,您可以向FragmentPagerAdapter
和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中执行以下操作
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == 1) //Here you SHOULD know that is from your childfragment
{
Fragment page = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + container.getCurrentItem());
// based on the current position you can then cast the page to the correct
// class and call the method:
if (container.getCurrentItem() == 0 && page != null) {
((MyChildFragment)page).callMethod(data);
}
}
}
我已经背诵了这一点,所以我可能遗漏了一些东西:)尝试将onActivityResult放在您的父活动中。如果回调出现,那么您必须通过调用父活动中所需片段的onActivityResult来手动将结果传输到片段
如果您能理解,请告诉我这是否有效。或者我将为您提供一个示例代码。尝试将onActivityResult放在您的父活动中。如果回调出现,则您必须通过调用父活动中所需片段的onActivityResult手动将结果传输到片段
如果您能理解,请告诉我这是否有效。或者我将为您提供一个示例代码。尝试将onActivityResult放在您的父活动中。如果回调出现,则您必须通过调用父活动中所需片段的onActivityResult手动将结果传输到片段
如果您能理解,请告诉我这是否有效。或者我将为您提供一个示例代码。尝试将onActivityResult放在您的父活动中。如果回调出现,则您必须通过调用父活动中所需片段的onActivityResult手动将结果传输到片段
如果您能理解,请告诉我这是否有效……或者我将为您提供一个示例代码。是的,我明白您的意思,它在这里确实有效。非常感谢:)是的,我明白你的意思,它在这里确实有效。非常感谢:)是的,我明白你的意思,它在这里确实有效。非常感谢:)是的,我明白你的意思,它在这里确实有效。非常感谢:)请在这里提供更多关于如何通过ViewPager将数据从父片段传递到子片段的提示,非常感谢
顺便说一句,嵌套片段无法在ActivityResult上接收到此错误。请在此提供有关如何通过ViewPager将数据从父片段传递到子片段的更多提示,非常感谢
顺便说一句,嵌套片段无法在ActivityResult上接收到此错误。请在此提供有关如何通过ViewPager将数据从父片段传递到子片段的更多提示,非常感谢
顺便说一句,嵌套片段无法在ActivityResult上接收到此错误。请在此提供有关如何通过ViewPager将数据从父片段传递到子片段的更多提示,非常感谢
顺便说一句,嵌套片段将不会出现错误