[Android/Java] Jetpack ViewBinding


Android Studio 4.1.3(windows版) で動作検証してます

ViewBindingを採用することで各コントロールをfindViewById()で呼び出さなくてもよくなりました
Android Developerの説明にある通りnullや型の安全性があるので積極採用する流れになると思います
※ActivityやFragmentでコントロールのIDに重複が無いように定義する必要があります

ViewBindingはAndroid Developerの説明で十分理解ができるかとは思いますが軽く説明してみます

Android DeveloperのViewBindingの説明は以下です

ViewBindingを使用するための設定

build.gradleに以下を追加します
ViewBindingを有効にするとBindingクラスが自動生成されます

build.gradle
android {
    viewBinding {
        enabled = true
    }
}

Activityの場合

MainActivityにid:buttonのButtonがあった場合の例

MainActivity.java
// 自動生成されます(activity_main.xml)
private ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = ActivityMainBinding.inflate(getLayoutInflater());
    final View view = binding.getRoot();
    binding.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        }
    });
    setContentView(view);
}

Fragmentの場合

MainFragmentにid:buttonのButtonがあった場合の例

MainFragment.java
// 自動生成されます(main_fragment.xml)
private MainFragmentBinding binding;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
    binding = MainFragmentBinding.inflate(getLayoutInflater());
    final View view = binding.getRoot();
    binding.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        }
    });
    return view;
}

カスタムViewがViewBindingに出てこない場合

ちょっと焦りましたが同僚が対応方法しってましたので共有させていただきます

DesignからカスタムViewを追加した場合以下のようにclassで登録されると思います

<view
    class="com.xxx.CustomView"
/>

これを以下のようにclassを削除しタグに直接カスタムクラスのクラス名を設定することで
ViewBindingで表示されるようになります

<com.xxx.CustomView
 
/>

この記事は以下の記事の補足です