学习第一周-viewBinding

androidstudio的使用

(1)当代码中进行变量替换工作的时候(例如视图绑定把textviw改为binding.textview的时候)。直接Ctrl+R进行替换,提升效率。最好不要直接replace all,一个一个的替换会防止一些同名片段被替代。
(2)变量重命名时,例如把长变量xxxxxxBinding改为binding,首先不要逐一替换(吃力),也不要ctrl+R(这样没有考虑变量的使用的地方),安全的做法是 右击 refactor->rename,这样能把用到变量的地方,都改为新名称。
(3)追溯变量的数据源时,或者查看网络请求是否成功时,logcat和断点都是不错的选择,当然断点是在debug模式下
(4)快速定位变量的使用和源,类的使用或者源,ctrl+鼠标点击即可

(5)使用了数据库可视化工具时,出现app第二次进入总是闪退(非代码原因),那就清除缓存 file->invalidate Cachae/Restat,具体原因没有细纠

视图绑定

用java写安卓时,使用viewbinding代替butterknife,或者findViewByid
(一)Activity
下面展示一些 内联代码片

 binding = ActivityBinding.inflate(getLayoutInflater());
     view = binding.getRoot();
     setContentView(view);
     

(二)Fragment

  binding = ActivityBinding.inflate(inflater, container, false);
         view = binding.getRoot();
         return  view

(三)Dialog

binding = DialogBinding.inflate(LayoutInflater.from(context));
       View view = binding.getRoot();
        setContentView(view);

(四)include

binding = ActivityBinding.inflate(getLayoutInflater());
         /*
   include根布局再添加id时,此时会报错:java.lang.NullPointerException: Missing required view with ID:***,所以根布局不能有id属性。即miss  子布局的根布局id
   如果使用merge,会切断子布局和父布局的联系,即miss include 控件的·id

    */
       actionbarBinding = binding.infoactionbar;

       View view = binding.getRoot();
       setContentView(view);

(五)MVP模式下的依赖倒置

/*
Activity

获取view对象的binding
*/
 View View = new View(Activity.this);
        setContentView(View.getBinding().getRoot());

/*
view
*/
定义私有变量  binding

 binding =activityBinding.inflate(LayoutInflater.from(context));
        Presenter = new IPresenter(context, this);
        initView();

(六)子Fragment继承父Fragment(父布局中有初始化view操作)

/*
如果父fragment在oncreateView方法中调用了一些方法(例如初始化view),
且子fragment中super.oncreat父布局的oncreatview方法,那么我们的绑定就要在super.oncreatview之前完成,
否则,父布局初始化view时,我们没有viewbinding,就出错
*/ 
//oncreateview中
 binding =  FragmentBinding.inflate(inflater,container,false);
 //在super之前,否则进行初始化时,binding还是为空
        super.onCreateView(inflater, container, savedInstanceState);
        //父布局中有initview操作(虽然该方法在子布局中会重写)
       return binding.getRoot();
       
//记得在destory中,让binding为空
 public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }

(七)适配器/recycleView

 public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  
            binding =ItemBinding.inflate(LayoutInflater.from(parent.getContext()),parent,false);
            return new Holder(binding);
            }
/*
一般是  return new Holder(view);
然后其他地方 holder.view.findViewById......
但是视图绑定,可以在holder类里面  定义 公有变量 binding    this.binding=binding//后者binding为传入参数
这样就可以用binding代替其他地方的findViewById了  eg holder.binding.textView之类
*/

推荐阅读链接: https://louyu.cc/friends/.



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值