如何在android的mvvm模型中使用checkox

如何在android的mvvm模型中使用checkox,android,mvvm,checkboxlist,Android,Mvvm,Checkboxlist,我正在制作Recyclerview,其中有复选框。我想知道如何使用下面的方法在android中实现MVVM数据绑定 @BindingAdapter({"app:setCheckBoxListener"}) public static void setCheckBoxListener(AppCompatCheckBox checkBox, final OnCheckListener onCheckListener) { checkBox.setOnCheckedChangeListener

我正在制作Recyclerview,其中有复选框。我想知道如何使用下面的方法在android中实现MVVM数据绑定

@BindingAdapter({"app:setCheckBoxListener"})
public static void setCheckBoxListener(AppCompatCheckBox checkBox, final OnCheckListener onCheckListener) {
    checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            onCheckListener.onCheckChanged(isChecked, (String) buttonView.getText());
        }
    });
}
这是我用于逻辑部分的ViewModel类。我希望当我选中复选框时,数据将保存在ArrayList中

import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import android.widget.Toast;

import com.codestrela.product.adapters.SelectContactAdapter;
import com.codestrela.product.data.Contact;
import com.codestrela.product.fragments.ListDialogFragment;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;

public class ListDialogViewModel {
    private static final String TAG = "ListDialogViewModel";
    public static final String CONTACT_LIST = "contact_list";
    public RowSelectContactViewModel viewModel;
    ListDialogFragment listDialogFragment;
    ArrayList<RowSelectContactViewModel> selectViewmodel;
    ArrayList<Contact> contacts;
    public SelectContactAdapter adapter;

    public ListDialogViewModel(ListDialogFragment listDialogFragment) {
        this.listDialogFragment = listDialogFragment;
        adapter = new SelectContactAdapter(new ArrayList<RowSelectContactViewModel>());

        selectViewmodel = new ArrayList<>();
        onContact();
    }

    public void onContact() {
        contacts = new ArrayList<>();

        SharedPreferences sharedPreferences = listDialogFragment.getActivity().getSharedPreferences("shared preference", Context.MODE_PRIVATE);
        Gson gson = new Gson();
        String json = sharedPreferences.getString(CONTACT_LIST, null);
        Toast.makeText(listDialogFragment.getActivity(), "" + json, Toast.LENGTH_SHORT).show();
        Type type = new TypeToken<ArrayList<Contact>>() {
        }.getType();
        contacts = gson.fromJson(json, type);
        Log.e(TAG, "array size: " + contacts.toString());
        for (int i = 0; i < contacts.size(); i++) {
            viewModel = new RowSelectContactViewModel();
            String name = contacts.get(i).getName();
            viewModel.contactName.set(name);
            viewModel.contactNumber.set(contacts.get(i).getNumber());
            Toast.makeText(listDialogFragment.getActivity(), " check "+viewModel.contactCheckbox.get(), Toast.LENGTH_SHORT).show();

            selectViewmodel.add(viewModel);
        }
        adapter.addAll(selectViewmodel);

    }

}
导入android.content.Context;
导入android.content.SharedReferences;
导入android.util.Log;
导入android.widget.Toast;
导入com.codestrela.product.adapters.SelectContactAdapter;
导入com.codestrela.product.data.Contact;
导入com.codestrela.product.fragments.ListDialogFragment;
导入com.google.gson.gson;
导入com.google.gson.reflect.TypeToken;
导入java.lang.reflect.Type;
导入java.util.ArrayList;
公共类ListDialogViewModel{
私有静态最终字符串标记=“ListDialogViewModel”;
公共静态最终字符串CONTACT\u LIST=“CONTACT\u LIST”;
公共行选择ContactViewModel viewModel;
ListDialogFragment ListDialogFragment;
ArrayList selectViewmodel;
ArrayList联系人;
公共选择联系人适配器;
公共ListDialogViewModel(ListDialogFragment ListDialogFragment){
this.listDialogFragment=listDialogFragment;
adapter=new SelectContactAdapter(new ArrayList());
选择ViewModel=new ArrayList();
onContact();
}
公共关系{
联系人=新的ArrayList();
SharedReferences SharedReferences=listDialogFragment.getActivity().GetSharedReferences(“共享首选项”,Context.MODE\u PRIVATE);
Gson Gson=新的Gson();
String json=SharedReferences.getString(联系人列表,空);
Toast.makeText(listDialogFragment.getActivity(),“”+json,Toast.LENGTH_SHORT).show();
Type Type=new-TypeToken(){
}.getType();
contacts=gson.fromJson(json,类型);
Log.e(标记,“数组大小:”+contacts.toString());
对于(int i=0;i
这是我在应用程序的recycler视图中使用的行布局。此复选框就是我在应用程序中使用的复选框。请帮帮我,我在这方面很新

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <variable
            name="vm"
            type="com.codestrela.product.viewmodels.RowSelectContactViewModel" />
    </data>
    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:cardCornerRadius="8dp"
        android:layout_margin="8dp">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="8dp"
            android:checked="@{vm.contactCheckbox.get()}"
            android:layout_alignParentLeft="true"/>
       <LinearLayout
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:orientation="vertical"
           android:layout_margin="8dp"
           android:layout_gravity="center">
        <TextView
            android:id="@+id/contact_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{vm.contactName}"
            android:layout_gravity="center"
            android:textSize="18dp"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{vm.contactNumber}"
          android:textSize="14dp"
            android:layout_marginTop="4dp"
            android:layout_gravity="center"
            />

    </LinearLayout></LinearLayout></androidx.cardview.widget.CardView>
</layout>

您不需要制作BindingAdapter,这太简单了

根据,您只需将其添加到xml中即可

它提供设置复选框和onCheckedChange的初始状态

<CheckBox
    android:id="@+id/rememberMeCheckBox"
    android:checked="@={viewmodel.rememberMe}"
/>
因此,在您的xml中

 <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="8dp"
            android:checked="@={vm.contactCheckbox}"
            android:layout_alignParentLeft="true"/>


只需添加等号
=
。。它使双向绑定工作

您能在单击逻辑部分中的复选框时详细说明如何使用它吗。@Pramessingh\\n提供完整的代码以帮助我知道您要在中使用哪个部分,但按下checkbox@PrameshSingh\\xml中此行处理的所有内容。。试试看,告诉我。。它与mecan u一起工作请告诉我如何做我想在ArrayList中保存每行的数据复选框
 <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="8dp"
            android:checked="@={vm.contactCheckbox}"
            android:layout_alignParentLeft="true"/>