[Android/Java] Jetpack DataBinding


Android Studio 4.1.3(windows版) での流れとなります

Jetpack DataBindingでボタンイベントを設定する方法を例にして説明します

Android DeveloperのJetpack DataBindingの説明は以下です

準備

以下を参考にJetpack Navigation + ViewModelを作成してください

DataBindingを使用するための設定

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

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

ViewModelでの準備

ボタンイベントを受けるメソッドを用意します

MainViewModel.java
public void onClickButton() {
}

FragmentのLayoutの準備

ここではFrameLayoutをConstraintLayoutにしてid:buttonのボタンを追加します



※ Convert FraneLayout to ConstraintLayoutでも変更できます

Codeを開きConstraintLayoutタグの箇所でwindowsの場合はAlt+Enterなどで
Convert to data bindinglayout を選択します

追加されたdataタグにViewModelを追加します

main_fragment.xml
<data>
    <variable name="viewModel" type="com.xxx.sample.MainViewModel" />
</data>

ボタンのonClickに以下を追加します
※DesignまたはCodeで直接追加してください

@{() -> viewModel.onClickButton()}

Fragmentでの準備

DataBindingの準備とDataBindingにViewModelをセットします

MainFragment.java
// ViewModelはFragment作成時のテンプレートで自動生成されたものです
private MainViewModel mViewModel;
// 自動生成されます(main_fragment.xml)
private MainFragmentBinding binding;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
    binding = DataBindingUtil.inflate(inflater, R.layout.main_fragment, container, false);
    final View view = binding.getRoot();
    return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    mViewModel = new ViewModelProvider(this).get(MainViewModel.class);
    // TODO: Use the ViewModel
    binding.setViewModel(mViewModel);
}

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