将参数包传递给Fragment

时间:2016-07-27 09:26:30

标签: android android-fragments

我需要在标签布局中将一些变量从活动传递到片段。我发现有两种首选方法可以通过标签布局的初始化方法将参数包传递给片段。

  1. 创建静态newInstance()方法并提供详细信息。
  2. FragmentPagerAdapter
  3. 中创建片段实例

    但是,我对这是如何运作有些怀疑。

    如果我创建了这个,那就是:

    public class SectionsPagerAdapter extends FragmentPagerAdapter {
        MyFragment myFragment;
    
        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
    
            myFragment = new MyFragment();
            Bundle args = new Bundle();
            args.putString("id", id);
            myFragment.setArguments(args);
        }
    
        // ... 
     }
    

    这里我创建片段的实例并在后面设置其参数。

    如果我用newInstance()方法创建它,就像这样:

    public static MyFragment newInstance(String id) {
        MyFragment myFragment = new MyFragment();
        Bundle args = new Bundle();
        args.putString("id", id);
        myFragment.setArguments(args);
    
        return myFragment;
    }
    

    有些疑惑:

    1. 何时会调用onCreate()onCreateView()?如果在行new MyFragment()之后和设置捆绑之前怎么办?

    2. getArguments是否有可能返回null?

    3. 在这两方面我都在做同样的事情。在args致电后设置new MyFragment()。我能设置争论的时间有多晚。是否有必要在new MyFragment()调用之后准确设置参数?

    4. 对不起,如果我问了一些愚蠢的问题。但我是Fragments的新手。谢谢:))

1 个答案:

答案 0 :(得分:2)

在提交片段事务后的某个时间,将调用onCreate()和onCreateView()。即调用commit()。并在此之前设置捆绑。

只要您在提交之前设置bundle,getArguments就不应为null。

两者都在做同样的事情。在第一个你自己创建片段实例并自己设置包。在第二阶段,您正在使用由您的片段管理的所谓的工厂方法(Effective Java Item 2)。所以很难在第二个中犯错,因为参数总是被设定。