当我想从与父活动不同的活动中获取信息时,我应该在片段中使用哪种方法?

时间:2018-04-24 09:06:04

标签: android android-fragments android-intent fragment

我有两项活动。我通过意图将参数传递给目标活动:

Bundle bundle = new Bundle();
bundle.putString("ImagePath", path);
Intent intent = new Intent(getActivity(), DetailActivity.class);
intent.putExtra("paths", bundle);
startActivity(intent);

目标活动DetailActivity有一个片段,我想在其中获取参数ImagePath。现在我有两种方法:

  1. 我通过DetailActivitygetIntent()中获取参数,然后使用setArgmunets()

  2. 将其传递给片段
  3. 我直接使用getActivity().getIntent()在目标片段中获取参数。

  4. 我喜欢方法2并且现在使用它因为干净的代码。但Android Studio会在Method invocation 'getIntent' may produce 'java.lang.NullPointerException'中告诉我getIntent()消息。

    那么我应该放弃方法2吗?

    更新:最后,我使用方法1,因为answer

      

    来自Fragment文档:

         
        

    通常,您会希望一个片段与另一个片段进行通信,例如根据用户事件更改内容。所有Fragment-to-Fragment通信都是通过相关的Activity完成的。两个碎片永远不应该直接沟通。

      

4 个答案:

答案 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)

Fragment上的

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