package afkt.project.base.app; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import androidx.recyclerview.widget.RecyclerView; import afkt.project.R; import butterknife.ButterKnife; import butterknife.Unbinder; import dev.base.activity.DevBaseActivity; import dev.utils.app.ViewUtils; import dev.utils.app.toast.ToastTintUtils; import dev.widget.function.StateLayout; /** * detail: Base 基类 * @author Ttt */ public abstract class BaseActivity extends DevBaseActivity { // = View = // 最外层 View protected LinearLayout vid_ba_linear; // Title View protected LinearLayout vid_ba_title_linear; // View 容器 protected LinearLayout vid_ba_content_linear; // 状态布局容器 protected LinearLayout vid_ba_state_linear; // 状态布局 protected StateLayout stateLayout; // = Object = // Unbinder public Unbinder unbinder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 布局初始化 layoutInit(); // 默认调用初始化方法, 按顺序执行 initMethodOrder(); } @Override protected void onDestroy() { super.onDestroy(); // 解绑 View if (unbinder != null) { unbinder.unbind(); } } // ================ // = Content View = // ================ @Override public final int contentId() { return R.layout.base_activity; } @Override public View contentView() { return null; } // ============ // = 二次封装 = // ============ /** * 获取 Layout id * @return Content Layout Id */ public abstract int getLayoutId(); /** * 布局初始化 * <pre> * 可以自己添加统一的 Title、StateLayout 等 * </pre> */ private void layoutInit() { // 初始化 View vid_ba_linear = ViewUtils.findViewById(this, R.id.vid_ba_linear); vid_ba_title_linear = ViewUtils.findViewById(this, R.id.vid_ba_title_linear); vid_ba_content_linear = ViewUtils.findViewById(this, R.id.vid_ba_content_linear); vid_ba_state_linear = ViewUtils.findViewById(this, R.id.vid_ba_state_linear); // 清空旧的 View ViewUtils.removeAllViews(vid_ba_content_linear); // 获取 Layout Id View View layoutView = ViewUtils.inflate(this, getLayoutId(), null); // 如果获取 为 null if (layoutView == null) layoutView = contentView(); if (layoutView != null) { // 添加 View LinearLayout.LayoutParams contentViewLP = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); vid_ba_content_linear.addView(layoutView, contentViewLP); // 插入 StateLayout insertStateLayout(); // 绑定 View unbinder = ButterKnife.bind(this, layoutView); } } // ============ // = 状态布局 = // ============ /** * 插入 State Layout */ public void insertStateLayout() { if (stateLayout != null) vid_ba_state_linear.removeView(stateLayout); if (stateLayout == null) stateLayout = new StateLayout(this); // 添加 View LinearLayout.LayoutParams contentViewLP = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); vid_ba_state_linear.addView(stateLayout, contentViewLP); } // ========= // = Toast = // ========= /** * 显示 Toast * @param success 是否成功样式 * @param text Toast 文本 */ public void showToast(boolean success, String text) { if (success) { ToastTintUtils.success(text); } else { ToastTintUtils.error(text); } } /** * 显示 Toast * @param success 是否成功样式 */ public void showToast(boolean success) { showToast(success, "操作成功", "操作失败"); } /** * 显示 Toast * @param success 是否成功样式 * @param successText 成功 Toast 文本 * @param errorText 错误 Toast 文本 */ public void showToast(boolean success, String successText, String errorText) { showToast(success, success ? successText : errorText); } // ============ // = 特殊方法 = // ============ /** * 注册 Adapter 观察者 * @param recyclerView {@link RecyclerView} */ public void registerAdapterDataObserver(RecyclerView recyclerView) { registerAdapterDataObserver(recyclerView, null, false); } /** * 注册 Adapter 观察者 * @param recyclerView {@link RecyclerView} * @param isRefAdapter 是否刷新适配器 */ public void registerAdapterDataObserver(RecyclerView recyclerView, boolean isRefAdapter) { registerAdapterDataObserver(recyclerView, null, isRefAdapter); } /** * 注册 Adapter 观察者 * @param recyclerView {@link RecyclerView} * @param adapterDataObserver Adapter 观察者 * @param isRefAdapter 是否刷新适配器 */ public void registerAdapterDataObserver(RecyclerView recyclerView, RecyclerView.AdapterDataObserver adapterDataObserver, boolean isRefAdapter) { if (recyclerView != null) { RecyclerView.Adapter adapter = recyclerView.getAdapter(); if (adapter != null) { adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { @Override public void onChanged() { super.onChanged(); // 获取数据总数 int itemCount = adapter.getItemCount(); // 如果为 null 特殊处理 ViewUtils.reverseVisibilitys(itemCount != 0, vid_ba_content_linear, vid_ba_state_linear); // 判断是否不存在数据 if (itemCount == 0) { stateLayout.showEmptyData(); } if (adapterDataObserver != null) { adapterDataObserver.onChanged(); } } }); // 刷新适配器 if (isRefAdapter) adapter.notifyDataSetChanged(); } } } }