Android - 来自片段的getIntent()

时间:2014-11-14 22:14:59

标签: android android-intent android-fragments

我正在尝试将位图从一个片段传递到另一个片段 - 我正在使用这篇文章作为指南:

send Bitmap using intent Android

我遇到的问题是使用getIntent()在接收活动片段中。它没有认识到这种方法。那里有一些帖子说它不可能在片段中使用getIntent()但是必须有办法吗?代码是否应该进入主机活动?

这是我正在尝试的:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    String filename = getIntent().getStringExtra("image");
    try {
        FileInputStream is = this.openFileInput(filename);
        imageBitmap = BitmapFactory.decodeStream(is);
        is.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

5 个答案:

答案 0 :(得分:31)

您可以将getIntent()Fragments一起使用,但需要先致电getActivity()。像getActivity().getIntent().getExtras().getString("image")之类的东西可以起作用。

答案 1 :(得分:5)

这不是你不能传递数据,而是你不想要的。

来自片段documentation

  

通常你会想要一个片段与另一个片段进行通信   示例根据用户事件更改内容。所有   片段到片段的通信是通过相关联的   活动。两个碎片永远不应该直接沟通。

如果您查看Fragment文档,它应该指导您完成此操作。

答案 2 :(得分:1)

如果您想获取意图数据,则必须调用Fragment's方法getArguments(),该方法会返回带有附加内容的Bundle

答案 3 :(得分:0)

您还可以使用FragmentsetArguments()通过getArguments()实现此目标,如下所示:

MyFragment fragment = new MyFragment();
Bundle bundle = new Bundle();
bundle.putString("image", fileName);
fragment.setArguments(bundle);//Here pass your data

在片段类内部,例如在onCreate()onCreateView()内部,请不要执行以下操作:

String fileName = this.getArguments().getString("image");

希望这也有帮助

答案 4 :(得分:0)

为了获得额外的意图,请在片段中编写此代码

if (requireActivity().intent.hasExtra("key_name")) {
    val extra = requireActivity().intent.getStringExtra("key_name")
}

希望它会奏效。