我有两个活动,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);
}
}
但它不起作用。我需要一般的正确代码,在这种特殊情况下。
答案 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);