Blog of CodeJELLOW’S ENGINEERING NOTES
← 返回文章

Fragment argument

fragment argument用于传递信息,在父fragment启动activity时将父fragment中的信息传递给启动的activity,并转交给子fragment。

本文目录 ⌄

    fragment argument用于传递信息,在父fragment启动activity时将父fragment中的信息传递给启动的activity,并转交给子fragment。

    举例使用的文件关系
    • CrimeActivity 子actviity
    • CrimeFragment CrimeActivity托管的fragment
    • CrimeListActivity 父activity
    • CrimeListFragment 父activity托管的fragment

    重写Intent方法(CrimeActivity)

    首先先写父fragment传递值时调用的Intent方法。

    Intent是在两个activity中传递消息,用此方法创建一个Intent,并添加进当前crime的extra信息。

    在父fragment中调用

    现在CrimeListFragment中的信息通过intent传递给了CrimeActivity。

    附加argument给子fragment

    通常的做法是,添加名为newInstance的静态方法给fragment类。使用这个方法完成fragment实例和Bundle对象的创建。newInstance这个方法是Activity调用的,在初始化fragment时显示特定的数据。

    调用setArgument(Bundle)方法添加argument。

    Bundle

    Bundle,是Android开发中的一个类,用于Activity之间传输数据用。

    TEXT
    Intent it = new Intent(A.this,B.class);
     
    Bundle bundle = new Bundle();
     
    bundle.putString("name","张三");
     
    it.putExtrats(bundle);
     
    startActivity(it);

    这样就把name为张三这个数据从A传到了B。健为name,值为张三。

    创建托管的CrimeFragment

    在初始化fragment时显示特定的数据。因为这个CrimeActivity是被CrimeListFragment调用的。

    调用newInstacne方法(新建实例)

    修改onCreate函数(CrimeFragment)

    初始化CrimeFragment时,就会得到传进来的值。

    需要注意的是,调用getArgument前必须调用过setArgument。getArgument返回的是当前fragment携带的argument。

    这样就可以将父fragment中的信息传递给子activity托管的fragment了。

    为什么不使用extra传递信息?

    argument能使fragment得到灵活性。fragment不应该知道activity使如何工作的。应该将值放入fragment的属性里。

    通过 RSS 订阅更新 →