带参数的Fragment

1. 要深刻理解Fragment 的生命周期

2. Fragment.getActivity()并不能保证非空。

3.如果在Fragment中有异步的回调, 特别要注意此时Fragment 是否还attached 在Activity中,可以调用isVisible()来判断

4. Layout 中添加fragment 与代码中添加Fragment 的区别:

复制代码
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:id="@+id/register_container"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <!---->
 8     <fragment
 9         android:layout_width="match_parent"
10         android:layout_height="match_parent"
11         class="com.xxx.xxxx.fragment.RegisterBasicInfoFragment" />
12 
13     
14 
15 </LinearLayout>
复制代码
复制代码
 1     @Override
 2     protected void onCreate(Bundle savedInstanceState) {
 3         super.onCreate(savedInstanceState);
 4         this.setContentView(R.layout.register);
 5         
 6         FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();
 7         RegisterBasicInfoFragment bf = new RegisterBasicInfoFragment();
 8         
 9         ft.replace(R.id.register_container, bf).commit();
10     }
复制代码

前者,register_container 被replace 成另外一个Fragment的时候,旧的Fragment不会走销毁流程onPause->onStop->onDetroyView;

但是后者,会走销毁流程。

 

5. 需要传入参数的Fragment, 要用静态的newInstance(.....)方式来获得实例,而不要直接new, 然后用setXXX 的方式。

复制代码
1     public static RegisterDetailInfoFragment newInstance(String userName, String password) {
2         RegisterDetailInfoFragment f = new RegisterDetailInfoFragment();
3         Bundle args = new Bundle();
4         args.putString("userName", userName);
5         args.putString("password", password);
        f.setArguments(args);

6 return f; 7 }
复制代码

你可能会说,为啥不直接用有参数的构造函数呢?原因是,某些情况,Fragment 要重新构建,系统不会认识的有参数的构造函数,只会调用默认无参构造函数;而用静态newInstance这种方式,你要在里面把参数放到setArguments当中,系统在onSavedInstanceState的时候,会把你的参数持久化,重建的时候,参数值就不会丢失了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值