android - 真的是看不懂v7的fragment了
PHP中文网
PHP中文网 2017-04-17 17:13:32
[Android讨论组]

1.单例模式一般是不允许被继承的,但是v7开始官方就要将Fragment设计成单例模式了
用AndroidStudio自带的生成Fragment如下

public class BaseFragment extends Fragment {
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

    private OnFragmentInteractionListener mListener;

    public BaseFragment() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment BaseFragment.
     */
    // TODO: Rename and change types and number of parameters
    public static BaseFragment newInstance(String param1, String param2{
        BaseFragment fragment = new BaseFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }
    //...
}

而且需要注意的是 Fragment 就是单例模式的,因此 BaseFragment extends Fragment 这岂不是官方违背设计思想?另外正常的设计Fragment肯定避免不了继承,单例模式只是节省资源而已

2.仔细看上面自动生成的方法:

/**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment BaseFragment.
     */
    // TODO: Rename and change types and number of parameters
    public static BaseFragment newInstance(String param1, String param2{
        BaseFragment fragment = new BaseFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

居然还是TODO,而且参数命名一看就是非正式的,不敢相信这种半成品居然是官方提供的

PHP中文网
PHP中文网

认证0级讲师

全部回复(4)
大家讲道理

没看懂,首先就不知道官方哪里宣传了Fragment要使用单例模式了?
另外,自动生成的Fragment是让你用来自己实现的,不是让你直接用的,那些TODO就是你要做的事情,你怎么把他当成官方写的了。要是一生成就实现功能来用,那还要你写代码干嘛。

天蓬老师

newInstance是工厂模式,TODO是让你自己写的,你总不能直接copy了用

伊谢尔伦

太傻了,啥时候设计成单例模式了

迷茫

为什么还要用例子去写?自己定义class不行吗

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号