首页 > 真的是看不懂v7的fragment了

真的是看不懂v7的fragment了

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,而且参数命名一看就是非正式的,不敢相信这种半成品居然是官方提供的


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


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


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


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

【热门文章】
【热门文章】