无法在嵌入另一个片段的片段上调用OnActivityResult()方法

时间:2014-12-01 07:04:35

标签: android android-fragments

这是我的代码层次结构:
活动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;
        }
    }
希望你们能理解我,请帮助我!

2 个答案:

答案 0 :(得分:2)

尝试在parentActivity中放置onActivityResult,如果回调到那时你必须通过从父Activity调用所需Fragment的onActivityResult来手动将结果传递给片段。

如果您能理解这一点,请告诉我这是否有效......或者我将为您提供示例代码..

答案 1 :(得分:1)

嵌套片段似乎不会收到onActivityResult,不确定它是否是错误或是预期的行为。

你可以做的一件事就是在你的片段中接收onActivityResult,然后感谢你传递的整数以识别你的请求,你可以通过你的{{{{{{ 1}}。

这应该不是很难:)

希望有所帮助

修改

来自here,您可以向ViewPagerFragmentPagerAdapter添加方法以获取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

我已经这样做了,所以我可能会遗漏一些东西:)