Android - 片段中的 getIntent()

Posted

技术标签:

【中文标题】Android - 片段中的 getIntent()【英文标题】:Android - getIntent() from a Fragment 【发布时间】:2015-01-12 10:06:19 【问题描述】:

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

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();
    

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

来自片段documentation:

通常你会希望一个 Fragment 与另一个 Fragment 进行通信,因为 基于用户事件更改内容的示例。全部 片段到片段的通信是通过关联的 活动。两个 Fragment 永远不应该直接通信。

如果您查看Fragment 文档,它应该会引导您了解如何执行此操作。

【讨论】:

投赞成票不是因为它解决了问题,而是正确的方法。您应该使用活动作为让片段相互通信的“媒介”。【参考方案3】:

您也可以通过 Fragment 使用 setArguments()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");

【讨论】:

是的,它的名字是Arguments。我会记住的。谢谢【参考方案4】:

如果你想获取 Intent 数据,你必须调用 Fragment's 方法 getArguments(),它返回 Bundle 和附加值。

【讨论】:

片段没有直接的 getArguments()。它们是 getActivity() 的属性【参考方案5】:

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

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

【讨论】:

以上是关于Android - 片段中的 getIntent()的主要内容,如果未能解决你的问题,请参考以下文章

Android:我们什么时候使用getIntent()?

当通知进入android时如何获取Bundle数据

Android getIntent() 空指针异常

Android getIntent() 返回第一个意图

如何将 getIntent.getStringExtra("username") 放入 android 适配器 onBindViewHolder(@NonNull final Vi

被替换的片段不会被破坏