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将数据从父片段传递到子片段的更多提示,非常感谢
顺便说一句,嵌套片段将不会出现错误