将位图Uri传递给另一个Activity的片段

时间:2015-12-02 19:12:06

标签: android android-intent bitmap fragment uri

我有两个活动,A和B.我从A的一个片段开始B,叫做F.我在B中有一个位图对象。我需要将这个位图的Uri传递给F.这是示例代码, 此代码位于F:

Intent bIntent = new Intent(getActivity(), B.class);
startActivityForResult(bIntent , 111);

此代码位于B:

Intent aIntent = new Intent(B.this, A.class);
aIntent.putExtra("image", uri);
setResult(RESULT_OK, aIntent);
finish();

此代码再次出现在F:

if(requestCode == 111 && resultCode==Activity.RESULT_OK && data != null) {
        Bundle extras = getActivity().getIntent().getExtras();
        if (extras != null) {
            Uri path = (Uri) extras.get("image");
            ImageView iv = (ImageView) getActivity().findViewById(R.id.myImage);
            iv.setImageURI(path);
        }            
}

但它不起作用。我需要一般的正确代码,在这种特殊情况下。

1 个答案:

答案 0 :(得分:3)

默认情况下,Android Uri类扩展了parcelable接口。您可以使用getParcelableExtra方法获取插入的Uri,如下所示:

Uri path = getActivity().getIntent().getParcelableExtra("image");
if(path != null) {
    ImageView iv = (ImageView) getActivity().findViewById(R.id.myImage);
    iv.setImageURI(path);
}

或以您自己的方式:

Bundle extras = getActivity().getIntent().getExtras();
        if (extras != null) {
            Uri path = (Uri) extras.getParcelable("image");
            if(path != null) {
                ImageView iv = (ImageView) getActivity().findViewById(R.id.myImage);
                iv.setImageURI(path);
            }
        }          

编辑:重置图像后尝试调用iv.invalidate:

Uri path = result.getParcelableExtra("image");
    if(path != null) {
        ImageView iv = (ImageView) getActivity().findViewById(R.id.myImage);
        iv.setImageURI(path);
        iv.invalidate();
    }

EDIT2:我刚才意识到活动B中存在错误。尝试更改并确保使用的是意图结果,这是onActivityResult的参数而不是GetActivity

setResult(RESULT_OK, editIntent);

setResult(RESULT_OK, aIntent);