2022年了Android开发的你还在用ButterKnife?

2022-10-08  本文已影响0人  _Jun

有关ViewBinding 的相关介绍官方介绍的比我详细

👇
详见官方文档

此文只记录如何简洁的在Android开发中base类中如何配置使用viewBinding来提高开发效率.

 class BaseActivity<T extends ViewBinding> extends AppCompatActivity{
protected T mBinding;
}

        Type superclass = getClass().getGenericSuperclass();
        Class<?> aClass = (Class<?>) ((ParameterizedType) superclass).getActualTypeArguments()[0];
        Method method = aClass.getDeclaredMethod("inflate", LayoutInflater.class);
        mBinding = (T) method.invoke(null, getLayoutInflater());
        setContentView(mBinding.getRoot());


            Type superclass = getClass().getGenericSuperclass();
            Class<?> aClass = (Class<?>) ((ParameterizedType) superclass).getActualTypeArguments()[0];
            Method method = aClass.getDeclaredMethod("inflate", LayoutInflater.class, ViewGroup.class, boolean.class);
            mBinding = (T) method.invoke(null, getLayoutInflater(), container, false);


            Type superclass = getClass().getGenericSuperclass();
            Class<?> aClass = (Class<?>) ((ParameterizedType) superclass).getActualTypeArguments()[0];
            Method method = aClass.getDeclaredMethod("inflate", LayoutInflater.class);
            mBinding = (T) method.invoke(null, getLayoutInflater());
            setContentView(mBinding.getRoot());


因为viewBinding的静态方法只有三个

            View v = inflate(context, getLayoutId(), this);
            Type superclass = getClass().getGenericSuperclass();
            Class<?> aClass = (Class<?>) ((ParameterizedType) superclass).getActualTypeArguments()[0];
            Method method = aClass.getDeclaredMethod("bind", View.class);
            mBinding = (T) method.invoke(null, v);

获取资源文件id
public abstract int getLayoutId();

RecyclerView 的adapter因为用的BQA,就没去研究怎么适配ViewBinding。


后记:

1.xml文件映射规则:
文件名映射后 首字母大写 下划线+小写会变成大写 其他不变 然后在最后加上Binding. 如 activity_main.xml将变为ActivityMainBinding
view id同上 但不会加Binding后缀,如 tv_text-> tvText

已知BUG

1.编译时如果有明显报错导致编译中断,后续改好了还是会一直报viewBinding有错误。
解决方法:Build->clear Project 然后重新run 或直接Rebuild Project

本文转自 blog.csdn.net/Dullyoung/a…,如有侵权,请联系删除。

作者:BlueSocks
链接:https://juejin.cn/post/7151330775521034271

上一篇 下一篇

猜你喜欢

热点阅读