视图绑定
视图绑定 是通过对xml属性转化为对应的绑定类 会对xml布局中所有的具有id属性的组件创建直接的引用
视图绑定 与 传统的findviewbyid
视图绑定: 是对id属性组件的直接引用 相当于只要组件只要有了id属性 就相当于 有了这个组件的实例对象 而且这种绑定规则贯穿于整个模块 不会出现空指针异常 和 类型的转化的情况 类型安全
findViewByid :是通过id获取组件 这种容易出现空指针异常 (经常遇到)会导致 程序崩溃 还需要 类型强制转化 有时用的不好 就会出错
视图绑定 与 数据绑定
视图绑定和数据绑定均会生成可用于直接引用视图的绑定类。但是,视图绑定旨在处理更简单的用例
视图绑定 : 视图绑定 不需要编译xml文件的注释? 会更快的编译文件 视图绑定不需要特别标记的 XML 布局文件,因此在应用中采用速度更快。在模块中启用视图绑定后,它会自动应用于该模块的所有布局。
数据绑定 反之。
使用
首先要在模块的build.grandle中 配置
android {
...
viewBinding {
enabled = true
}
}
如果在activity 中
- ?首先以对应布局文件名的驼峰式命名法在后面添加Binding 得到绑定类 在使用这个类 中的
inflate方法获取绑定类实例 - 用这个绑定类实例 通过 getRoot 获取 根元素
- 为activity设置这个根元素 以活动视图
package com.example.test;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import com.example.test.Fragment.Fragment1;
import com.example.test.databinding.ActivityViewBindBinding;
public class ViewBind extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 获取activity 的视图实例
ActivityViewBindBinding binding = ActivityViewBindBinding.inflate(getLayoutInflater());
//获取 视图的根实例
View root = binding.getRoot();
//将根视图传递到 setContentView(),使其成为屏幕上的活动视图。
setContentView(root);
binding.btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
binding.text.setText(String.valueOf(Integer.parseInt(binding.text.getText().toString())+1));
}
});
}
}
如果在Fragment中
- ?首先以对应布局文件名的驼峰式命名法在后面添加Binding 得到绑定类 在使用这个类 中的
inflate方法获取绑定类实例 - 用这个绑定类实例 通过 getRoot 获取 根元素
- 返回这个根元素 以绑定视图
package com.example.test.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.example.test.R;
import com.example.test.databinding.Fragment1Binding;
import org.jetbrains.annotations.NotNull;
/*
createName : 程序员keven
createTime : 2022/3/3
*/
public class Fragment1 extends Fragment {
public Context mcontext ;
@Override
public void onAttach(@NonNull @NotNull Context context) {
super.onAttach(context);
this.mcontext = context ;
}
@Nullable
@org.jetbrains.annotations.Nullable
@Override
public View onCreateView(@NonNull @NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
Fragment1Binding fragment1Binding = Fragment1Binding.inflate(inflater);
LinearLayout root = fragment1Binding.getRoot();
return root;
}
}
|