视图绑定【android jetpack】

视图绑定

视图绑定 是通过对xml属性转化为对应的绑定类 会对xml布局中所有的具有id属性的组件创建直接的引用

视图绑定 与 传统的findviewbyid

视图绑定: 是对id属性组件的直接引用 相当于只要组件只要有了id属性 就相当于 有了这个组件的实例对象 而且这种绑定规则贯穿于整个模块 不会出现空指针异常 和 类型的转化的情况 类型安全

findViewByid :是通过id获取组件 这种容易出现空指针异常 (经常遇到)会导致 程序崩溃 还需要 类型强制转化 有时用的不好 就会出错

视图绑定 与 数据绑定

视图绑定和数据绑定均会生成可用于直接引用视图的绑定类。但是,视图绑定旨在处理更简单的用例

视图绑定 : 视图绑定 不需要编译xml文件的注释  会更快的编译文件 视图绑定不需要特别标记的 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;
    }
}

你可能感兴趣的:(android,java,android,jetpack,android)