我有两项活动。我通过意图将参数传递给目标活动:
Bundle bundle = new Bundle();
bundle.putString("ImagePath", path);
Intent intent = new Intent(getActivity(), DetailActivity.class);
intent.putExtra("paths", bundle);
startActivity(intent);
目标活动DetailActivity
有一个片段,我想在其中获取参数ImagePath
。现在我有两种方法:
我通过DetailActivity
在getIntent()
中获取参数,然后使用setArgmunets()
我直接使用getActivity().getIntent()
在目标片段中获取参数。
我喜欢方法2并且现在使用它因为干净的代码。但Android Studio会在Method invocation 'getIntent' may produce 'java.lang.NullPointerException'
中告诉我getIntent()
消息。
那么我应该放弃方法2吗?
更新:最后,我使用方法1,因为answer:
来自Fragment文档:
通常,您会希望一个片段与另一个片段进行通信,例如根据用户事件更改内容。所有Fragment-to-Fragment通信都是通过相关的Activity完成的。两个碎片永远不应该直接沟通。
答案 0 :(得分:1)
您可以查看额外内容..
Intent intent = getActivity().getIntent();
if(intent.hasExtra("paths")){
// get the data
}else{
// Do something else
}
答案 1 :(得分:0)
不,这与意图无关。这是因为在某些时间点(例如片段已从活动中分离),getActivity()方法可以返回null。因此,正确的通话将是下一个:
if(getActivity != null) getActivity().getIntent()
答案 2 :(得分:0)
getActivity()
可能会产生null。
因此,您需要使用任何接口进行活动和片段之间的通信,或者通过在片段实例中传入setArgument()
来使用bundle。
答案 3 :(得分:0)
使用以下代码:
Bundle bundle = new Bundle();
bundle.putString(Constants.BUNDLE_DATA, "From Activity");
Fragment fragment = new Fragment();
fragment.setArguments(bundle);
并在Fragment onCreateView方法中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String strtext = getArguments().getString(Constants.BUNDLE_DATA);
return inflater.inflate(R.layout.fragment, container, false);
}
如果您想发送大数据,请创建模型并使该模型实现Serializable 。