android 封装view,Android项目基类封装ViewBinding、MVP、ViewModel

都会需要有用到BaseActivity,从最开始的initData、initView,到后来需要承载监听推送、监听网络变化的广播、延迟锁定等等各种需求,BaseActivity的功能越来越杂,越来越密集。相对实际的页面上的功能需求,基类的封装经过这样长时间的无脑堆砌,到最后看起来会更匪夷所思。所以从一开始,Base的封装就要足够清晰、稳健、可扩展。

AndroidBase

我的思路是分层继承,每一层只做和这一层功能相关的事,变动修改单一功能都是清晰的,同时在最后的一层功能又是完整的。

AppCompatActivity

|

BaseViewActivity

|

BaseFunctionsActivity

|

BaseViewModelActivity

|

BaseMVPActivity

|

BaseToolbarActivity

1.BaseViewActivity(View层)

主要代码:

public abstract class BaseViewActivity extends AppCompatActivity

{

private View rootView;

protected VB vBinding;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setRequestedOrientation(getScreenOrientation());//竖屏

vBinding = ViewBindingCreator.createViewBinding(getClass(), getLayoutInflater());

rootView = generateContentView(vBinding == null ? getContentView() : vBinding.getRoot());

setContentView(rootView);

}

protected View getContentView()

{

return null;

}

protected View generateContentView(View contentView)

{

return contentView;

}

protected int getScreenOrientation()

{

return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;

}

public void showLoadingDialog()

{

}

public void hideLoadingDialog()

{

}

}

ViewBindingCreator主要代码:

@SuppressWarnings("unchecked")

public static VB createViewBinding(Class targetClass,

LayoutInflater layoutInflater)

{

Type type = targetClass.getGenericSuperclass();

if (type instanceof ParameterizedType)

{

try

{

Type[] types = ((ParameterizedType) type).getActualTypeArguments();

for (Type type1 : types)

{

if (type1.getTypeName()

.endsWith("Binding"))

{

Method method = ((Class) type1).getMethod("inflate",

LayoutInflater.class);

return (VB) method.invoke(null, layoutInflater);

}

}

}

catch (Exception e)

{

e.printStackTrace();

}

} return null;

}

public abstract class BaseViewFragment extends Fragment

{

protected VB vBinding;

@Nullable

@Override

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,

@Nullable Bundle savedInstanceState)

{

if (vBinding == null)

{

vBinding = ViewBindingCreator.createViewBinding(getClass(), inflater);

View rootView = generateContentView(

vBinding == null ? getContentView() : vBinding.getRoot());

rootView.setBackgroundColor(getResources().getColor(R.color.colorBackgroundTint));

onCreateView(rootView);

}

return vBinding.getRoot();

}

protected abstract void onCreateView(View rootView);

protected View getContentView()

{

return null;

}

protected View generateContentView(View contentView)

{

return contentView;

}

protected void setStatusBarTextDark(boolean isStatusBarTextDark)

{

Activity activity = getActivity();

if (activity instanceof BaseViewActivity)

{

((BaseViewActivity) activity).setStatusBarTextDark(isStatusBarTextDark);

}

}

protected void showLoadingDialog()

{

Activity activity = ge

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值