设置活动片段的参数

我想从我的活动传递参数到片段,embedded到活动中。 片段静态地embedded到xml布局中。 我试图像这样调用setArgument():

setContentView(R.layout.detail_activity); DetailFragment detailFragment = (DetailFragment) getFragmentManager().findFragmentById(R.id.detailFragment); detailFragment.setArguments(getIntent().getExtras()); 

但已经太晚了,因为setArguments必须在创build片段后立即调用。 唯一的是我看到它getArguments()和更改包。 更好的方法?

Solutions Collecting From Web of "设置活动片段的参数"

AFAIK,当在XML中embedded片段时,不能像使用setArguments()那样使用setArguments() 。 如果这很关键,那么最好dynamic地添加片段。 但是,如果您确实希望通过XMLembedded片段,则可以通过不同的方式传递该数据。

  1. 让Activity实现片段的事件监听器。 然后让片段在创build时或在需要时从活动中请求所需的参数。 与片段沟通
  2. 创build可以embedded到xml中的自定义属性以及片段。 然后在片段的通货膨胀过程中,parsing自定义属性以获取其数据。 自定义片段属性
  3. 在片段中创build公共设置器,并让活动直接使用它们。 如果在片段的onCreate()方法之前设置它们至关重要,那么从活动的onAttachFragment()方法中执行。

你有两个select

  1. 如果您只是需要活动意图中的信息,那么将意图信息放入片段参数中只会增加一个不必要的步骤。 你可能只是保持简单,从你的片段调用

     Bundle data = getActivity().getIntent().getExtras(); 
  2. 如果您需要添加不属于活动意图的信息,则在您的片段中创build一个无参数构造函数,如:

     public DetailFragment() { this.setArguments(new Bundle()); } 

那么在你的活动中,你可以添加任何你需要的参数代码:

  DetailFragment frg = (DetailFragment) getFragmentManager().findFragmentById(R.id.detailFragment); frg.getArguments().putBundle("key", data); 

这里的要点是使用现有的捆绑对象,而不是在片段被附加到活动之后尝试调用setArguments()。

将数据传递给Fragment的另一种方法如下所示:

 //In DetailFragment (for Instance) define a public static method to get the instance of the fragment public static final DetailFragment getInstance(Bundle data) { DetailFragment fragment = new DetailFragment(); fragment.setArguments(data); return fragment; } 

并且从Activity内部附加DetailFragment

 Bundle data = new Bundle(); //Add data to this bundle and pass it in getInstance() of DetailFragment fragmentTransaction.replace(R.id.frament_layout, DetailFragment.getInstance(data));