怎么做网站统计,深圳微商城网站制作价格,wordpress去广告,设计素材免费下载现在的Android开发中#xff0c;Activity和Fragment都是必不可少的#xff0c;正如上篇博客所写#xff0c;我们都会封装一个基类的Activity来做一些公共基础的操作。对于Fragment应用的越发广泛#xff0c;在实际开发中#xff0c;我们也应当封装一个基础的Fragment…现在的Android开发中Activity和Fragment都是必不可少的正如上篇博客所写我们都会封装一个基类的Activity来做一些公共基础的操作。对于Fragment应用的越发广泛在实际开发中我们也应当封装一个基础的Fragment让逻辑代码更加清晰也利于后期的维护和可读性。直接上代码首先是几个变量protected View mRoot;protected Unbinder mRootUnBinder;protected boolean mIsFirstInitData true;其中mRoot是Fragment的布局mRootUnbinder看他的类型就知道是因为引入了ButterKnife所以定义这个Unbinder变量用于后面的控件绑定。而boolean型变量mIsFirstInitData顾名思义用于判断是否是第一次初始化数据用于避免每次加载时都刷新数据详细看后面的代码。接下来是onAttach方法Overridepublic void onAttach(Context context) {super.onAttach(context);//初始化参数initArgs(getArguments());}这里只有一个initArgs方法用于初始化参数具体实现由子类复写做具体的业务逻辑。然后是onCreateView方法NullableOverridepublic View onCreateView(LayoutInflater inflater, Nullable ViewGroup container, Nullable Bundle savedInstanceState) {if (mRoot null) {int layId getContentLayoutId();//初始化当前的根布局但是不在创建时就添加到container里面View root inflater.inflate(layId, container, false);initWidget(root);mRoot root;} else {if (mRoot.getParent() ! null) {//把当前Root从其父控件中移出((ViewGroup) mRoot.getParent()).removeView(mRoot);}}return mRoot;}在这里面先做判断当前mRoot如果为null则通过getContentLayoutId方法拿到布局文件的Id然后通过inflater拿到view再调用initWidget方法初始化控件在initWidget方法中调用ButterKnife框架详细代码后面贴。且将拿到的root赋值给mRoot。若mRoot不为null则尝试将mRoot从其父控件移出最后将mRoot返回。接下来是onViewCreated方法Overridepublic void onViewCreated(View view, Nullable Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);if(mIsFirstInitData) {mIsFirstInitData false;onFirstInit();}//当View创建完成后初始化数据initData();}这里首先就用到了mIsFirstInitData这个变了如果是第一次加载则调用onFirstInit这个方法进行第一次的一些必要的初始化操作然后调用initData方法进行初始化数据。当然这两个初始化的方法也都是交由子类复写做具体需要的业务逻辑。最后在定义一个返回值是boolean类型的onBackPressed方法public boolean onBackPressed() {return false;}如果有子类重写了onBackPressed这个方法对返回键做了具体的自己的处理那么就返回true这个用于Activity中返回键处理时判断子Fragment有没有已经多返回键做了具体处理具体方法上篇Activity中有写。最后贴上完整代码public abstract class Fragment extends android.support.v4.app.Fragment {protected View mRoot;protected Unbinder mRootUnBinder;protected boolean mIsFirstInitData true;Overridepublic void onAttach(Context context) {super.onAttach(context);//初始化参数initArgs(getArguments());}NullableOverridepublic View onCreateView(LayoutInflater inflater, Nullable ViewGroup container, Nullable Bundle savedInstanceState) {if (mRoot null) {int layId getContentLayoutId();//初始化当前的根布局但是不在创建时就添加到container里面View root inflater.inflate(layId, container, false);initWidget(root);mRoot root;} else {if (mRoot.getParent() ! null) {//把当前Root从其父控件中移出((ViewGroup) mRoot.getParent()).removeView(mRoot);}}return mRoot;}Overridepublic void onViewCreated(View view, Nullable Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);if(mIsFirstInitData) {mIsFirstInitData false;onFirstInit();}//当View创建完成后初始化数据initData();}/*** 初始化相关参数** param bundle 参数Bundle* return 如果参数初始化正确返回true错误返回false*/protected void initArgs(Bundle bundle) {}/*** 得到当前界面的资源文件Id** return 资源文件Id*/protected abstract int getContentLayoutId();/*** 初始化控件*/protected void initWidget(View root) {mRootUnBinder ButterKnife.bind(this, root);}/*** 初始化首次数据*/protected void onFirstInit() {}/*** 初始化数据*/protected void initData() {}/*** 返回按键触发时调用** return 返回true代表我已处理返回逻辑Activity不用自己Finish* 返回false代表我没有处理逻辑 Activity自己走自己的逻辑*/public boolean onBackPressed() {return false;}}转载时请注明出处及相应链接本文永久地址https://blog.yayuanzi.com/22303.html微信打赏支付宝打赏感谢您对作者rick的打赏我们会更加努力 如果您想成为作者请点我