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()的主要内容,如果未能解决你的问题,请参考以下文章
如何将 getIntent.getStringExtra("username") 放入 android 适配器 onBindViewHolder(@NonNull final Vi