设置活动片段的参数

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

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

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

  • “RecyclerView:没有适配器连接; 跳过布局“为recyclerview在片段
  • typestypes不匹配:不能从RegisterFragment转换为Fragment
  • android棒棒糖animation故障
  • 通过触摸下的观点
  • 如何使用类名而不是索引实例化片段类
  • 片段方法:attach(),detach(),remove(),replace(),popBackStack()
  • 将参数添加到活动后,是否可以将parameter passing给片段?
  • 运行Android应用程序时出错 - 无法初始化OpenglES仿真,使用'-gpu off'来禁用它
  • 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));