zoukankan      html  css  js  c++  java
  • Android项目开发填坑记-Fragment的onAttach

    背景

    现在Android开发多使用一个Activity管理多个Fragment进行开发,不免需要两者相互传递数据,一般是给Fragment添加回调接口,让Activity继承并实现。

    回调接口一般都写在Fragment的onAttach()方法中,Fragment 3.0 的onAttach()方法有2个重载,其中一个被废弃,所以通常是:

    XX_Fragment extends Fragment(Fragment 3.0)

    @Override
        public void onAttach(Context context) {
            if (context instanceof OnCoverChangeListener) {
                mListener = (ABC_Listener) context;
            } else {
                throw new RuntimeException(context.toString()
                        + " must implement ABC_Listener");
            }
            super.onAttach(context);
        }

    但是在一些特定的Android版本下,这个onAttach(Context context)并未被调用,而是调用了废弃的onAttach(Activity activity)方法。

    解决方案

    如果使用了Fragment 3.0,并且用到了自定义回调,那么为了兼容,需要:

    @Override
        public void onAttach(Context context) {
            if (context instanceof OnCoverChangeListener) {
                mListener = (ABC_Listener) context;
            } else {
                throw new RuntimeException(context.toString()
                        + " must implement ABC_Listener");
            }
            super.onAttach(context);
        }
    
        //SDK API<23时,onAttach(Context)不执行,需要使用onAttach(Activity)。Fragment自身的Bug,v4的没有此问题
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                if (activity instanceof OnCoverChangeListener) {
                    mListener = (ABC_Listener) activity;
                } else {
                    throw new RuntimeException(activity.toString()
                            + " must implement ABC_Listener");
                }
            }
    
        }

    总结

    建议使用FragmentV4版的,减少不必要的系统自身Bug的处理。

    还有一篇关于FragmentV4、Fragment3.0的onBackPressed();的Bug详解:
    传送门:Android项目开发填坑记-Fragmen的onBackPressed

    PS:

    你可以关注的我GithubCSDN微博

  • 相关阅读:
    数据存储过程学习
    Python实现目录文件扫描功能
    python关于邮件发送包smtplib的实践分享
    Java自学笔记之学生管理系统
    Java自学笔记
    Java自学笔记1206
    java自学笔记
    Django常用命令
    django+SQLite搭建轻量级个人博客(六)数据校验
    django+SQLite搭建轻量级个人博客(五)分页
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300471.html
Copyright © 2011-2022 走看看