我正在尝试将位图从一个片段传递到另一个片段 - 我正在使用这篇文章作为指南:
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();
}
}
答案 0 :(得分:31)
您可以将getIntent()
与Fragments
一起使用,但需要先致电getActivity()
。像getActivity().getIntent().getExtras().getString("image")
之类的东西可以起作用。
答案 1 :(得分:5)
这不是你不能传递数据,而是你不想要的。
来自片段documentation:
通常你会想要一个片段与另一个片段进行通信 示例根据用户事件更改内容。所有 片段到片段的通信是通过相关联的 活动。两个碎片永远不应该直接沟通。
如果您查看Fragment
文档,它应该指导您完成此操作。
答案 2 :(得分:1)
如果您想获取意图数据,则必须调用Fragment's
方法getArguments()
,该方法会返回带有附加内容的Bundle
。
答案 3 :(得分:0)
您还可以使用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");
希望这也有帮助
答案 4 :(得分:0)
为了获得额外的意图,请在片段中编写此代码
if (requireActivity().intent.hasExtra("key_name")) {
val extra = requireActivity().intent.getStringExtra("key_name")
}
希望它会奏效。