Activity
整体规划
1 2 3 4 5 BaseActivity:把onPostCreate逻辑拆分为三个方法,方便管理。 BaseCommonActivity:不同项目可以复用的逻辑,例如:启动界面等 BaseLogicActivity:本项目的通用逻辑,例如:背景颜色,全局迷你播放控制等。 BaseTitleActivity:标题相关。
BaseActivity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 package com.example.testandroid.activity;import android.os.Bundle;import androidx.annotation.Nullable;import androidx.appcompat.app.AppCompatActivity;public class BaseActivity extends AppCompatActivity { protected void initViews () { } protected void initDatum () { } protected void initListeners () { } @Override protected void onPostCreate (@Nullable Bundle savedInstanceState) { super .onPostCreate(savedInstanceState); initViews(); initDatum(); initListeners(); } }
最主要的三个动作就是:
initView: 初始化控件
initDatum: 初始化数据
initListeners:界面中的控件监听器设置
为什么放在 postCreate
?
因为onCreate
里面:
1 2 3 4 5 6 @Override protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
必须要有【设置当前Activity要显示那个布局】的哪一行代码。
然后我们的 initView 要想拿到控件,就只能在这行代码后面 findViewById 找到控件。
而 onPostCreate 就是在 OnCreate 完成之后才调用的,所以就刚好放在这里。
BaseCommonActivity
1 2 3 4 5 6 7 public class BaseCommonActivity extends BaseActivity {}
BaseLogicActivity
1 2 3 4 5 6 7 8 9 10 11 12 13 public class BaseLogicActivity extends BaseCommonActivity { protected BaseLogicActivity getHostActivity () { return this ; } }
这里的getHostActivity
是为了让 Activity 和 fragment 都能通过这个方法拿到自己界面的 activity 实例。
不然 activity 界面用 this,fragment 又不能用很不协调。
BaseTitleActivity
1 2 3 4 5 6 public class BaseTitleActivity extends BaseLogicActivity {}
Fragment
基本道理一直。
这里我们用 BaseDialogFragment
举例
结构逻辑:
DialogFragment -> BasedialogFragment -> TermServiceDialogFragment
系统类 我们定制的通用控制器 开发中用到的具体Fragment
BasedialogFragment
Fragment 和 Activity 不同的点在:
Activity onCreate方法中 setContentView(R.layout.activity_main);
这钟设置当前 Activity 的 xml 显示方法没有了。
Fragment 里面要我们自己封装。
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 package com.example.testandroid.fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.fragment.app.DialogFragment;public abstract class BaseDialogFragment extends DialogFragment { protected void initViews () {} protected void initDatum () {} protected void initListeners () {} @Nullable @Override public View onCreateView (@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = getLayoutView(inflater, container, savedInstanceState); return view; } protected abstract View getLayoutView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) ; @Override public void onViewCreated (@NonNull View view, @Nullable Bundle savedInstanceState) { super .onViewCreated(view, savedInstanceState); initViews(); initDatum(); initListeners(); } public <T extends View > T findViewById (@IdRes int id) { return getView().findViewById(id); } protected BaseCommonActivity getHostActivity () { return (BaseCommonActivity) getActivity(); } }
解释:
onViewCreated 就是 Fragment 中的 onpostCreate
onCreateView 即是 Fragment 中的 onCreate
这个方法会返回 Fragment 会显示的View
getLayoutView :将一个 xml 文件 to 一个View 。不过是 abstract 抽象的,谁继承,谁就要实现。
这样继承了这个 BaseDialogFragment 的Fragment
都要重写 getLayoutView 这个方法来指定当前 Fragment 对应的xml 是什么
。
就像这样:
1 2 3 4 5 6 7 8 9 10 11 @Override protected View getLayoutView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_dialog_term_service,container,false ); }