【问题标题】:Pass bitmap Uri to a fragment of another Activity将位图 Uri 传递给另一个 Activity 的片段
【发布时间】:2015-12-02 19:12:05
【问题描述】:

我有两个Activity,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);
        }            
}

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

【问题讨论】:

  • 您将错误的意图对象传递给 setresult

标签: android android-intent bitmap fragment uri


【解决方案1】:

默认情况下,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:我刚刚意识到 Activity B 中存在错误。尝试更改并确保您使用的意图结果是 onActivityResult 的参数而不是 GetActivity

setResult(RESULT_OK, editIntent);

setResult(RESULT_OK, aIntent);

【讨论】:

  • 您好,您可以在设置好镜像后尝试调用 iv.invalidate() 吗?
  • 您好 Orkun,谢谢您的回答。但似乎 (path != null ) 条件返回 false !
  • 这不是一个真正的问题。上面的代码只是一个演示。我纠正它。真正的问题是为什么没有任何东西传递给片段?为什么“路径”为空?
  • 我可以定义一个全局变量来在活动之间传递数据而不是 putExtra 和 Bundle 吗?
  • 您可以使用指向 uri 路径的字符串并在活动中重新创建它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多