ViewPager+Fragment+Activit构建页面值得注意的点

FragmentPagerAdapter和FragmentStatepagerAdapter

  • 区别:

    • FragmentPagerAdapter不用到用时调onDestoryView()和onCreateView()----Fragment没有被销毁
    • FragmentStatePagerAdapter不用到用时调onDestoryView()、onDestory()和onCreate()、onCreateView()----Fragment被销毁
  • 使用场景:

    • 页面少、经常需要调用使用FragmentPagerAdapter能更好提升响应速度
    • 数量多、调用次数少、占用内存多使用FragmentStatePagerAdapter能更好管理内存

Activity管理Fragment实例的正确方法

  • 实例化Fragment

    • 错误:new xxFragment(参数)
    • 正确:应该使用Bundle传递参数,这样当Fragment被销毁重新创建的时候Bundle传递的参数会被回复,普通写法不会(因为被销毁重新创建只会走默认构造方法,获取不到值)
      如下
    public static CommunityFragment newInstance(Long id) {
         Bundle bundle = new Bundle();
         bundle.putLong("type", Id());
         CommunityLocalFragment fragment = new CommunityLocalFragment();
         fragment.setArguments(bundle);
         return fragment;
     }
     @Override
      public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
         Bundle bundle = this.getArguments();
         if (bundle != null) {
             userId = bundle.getLong("id");
         }
    
  • 使用SparseArray集合巧妙管理Fragment

    • 错误:
      在这里插入图片描述这么写,当activity发生屏幕旋转或者被回收,Adapter的getItem()方法不会被执行,会导致所拿到的Fragmen和显示的Fragmen不是同一个,造成点击按钮没反应等情况

    • 正确:

      • SparseArray 一个功能接近map的集合
      • 每当调用instantiatiItem(…)时会返回当前fragment保存下来
      • 每当调用destroyItem(…)时移除对应fragment

    在这里插入图片描述

在这里插入图片描述
这样能保证mFragmets集合里保存的肯定是显示的那个fragment实例

Fragment与Activity之间的通信

  • Activity里调用Fragment方法

    • 直接通过Fragment实例进行调用
  • Fragment里调用Activity方法

    • 错误:getActivity()再进行强制类型装换获取到activity然后调用方法,因为有时候getActivity =null,并且当fragment换到另一个activity里时就需要进行更改。
    • 正确:通过接口回调的方式,fragment对外提供自己的核心事件回调,activity自己选择是否监听(调用接口方法前,记着判空)

    在这里插入图片描述

其他

fragment里操作View记着先判断该fragment是否被添加过
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值