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
就是你要做的事情,你怎么把他当成官方写的了。要是一生成就实现功能来用,那还要你写代码干嘛。