如何使用回收者视图适配器在xml中添加两个viewModel类

时间:2019-10-03 07:53:44

标签: android data-binding android-recyclerview recycler-adapter

我需要在单个回收器视图中添加两个ViewModel类,但尚未得到任何解决方案。我不知道是否有其他办法可以解决,建议我尝试这样做:

public class PlannedListAdapter extends
RecyclerView.Adapter<PlannedListAdapter.ViewHolder> {
    private List<AddMedicineData> dataModelList;
    private Context context;
    public PlannedListAdapter(List<AddMedicineData> dataModelList, Context ctx) {
        this.dataModelList = dataModelList;
        context = ctx;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        PlannedRecyclerItemBinding binding = DataBindingUtil.inflate(
                LayoutInflater.from(parent.getContext()),
                R.layout.planned_recycler_item, parent, false);
        return new ViewHolder(binding);
    }
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        AddMedicineData dataModel = dataModelList.get(position);
       /* holder.itemRowBinding.timePill.setText();*/

        for (int j=0;j<dataModelList.get(position).getPilldates().size();j++){
            String timeList = dataModelList.get(position).getPilldates().get(j).getPilltime();
            Log.d("@@PillTimes", timeList);
            holder.itemRowBinding.timePill.setText(dataModel.getPilldates().get(j).getPilltime());
        }
        holder.bind(dataModel);
    }
    @Override
    public int getItemCount() {
        return dataModelList.size();
    }
    public class ViewHolder extends RecyclerView.ViewHolder {
        public PlannedRecyclerItemBinding itemRowBinding;
        public ViewHolder(PlannedRecyclerItemBinding itemRowBinding) {
            super(itemRowBinding.getRoot());
            this.itemRowBinding = itemRowBinding;
        }
        public void bind(Object obj) {
            itemRowBinding.setVariable(BR.medicineModel, obj);
            itemRowBinding.executePendingBindings();
        }
    } }

在我的XML中,我添加了另一个像这样的视图模型:

<?xml version="1.0" encoding="utf-8"?>

<data>
    <variable
        name="medicineModel"
        type="com.kulsoft.care4cute.databinding.AddMedicineData" />

  <!--  <variable
        name="pillTakeModel"
        type="com.kulsoft.care4cute.models.MedicalModel.PilltakeModel" />-->
</data>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RelativeLayout
        android:id="@+id/lin_medicine"
        android:background="@color/white"
        android:layout_marginTop="@dimen/padding_10"
        android:layout_marginStart="@dimen/padding_10"
        android:layout_marginEnd="@dimen/padding_10"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">


            <RelativeLayout
                android:id="@+id/imgClick"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <ImageView

                    android:src="@drawable/clock"
                    android:layout_width="@dimen/dimen_20dp"
                    android:layout_height="@dimen/dimen_20dp">

                </ImageView>

            </RelativeLayout>

            <LinearLayout
                android:orientation="vertical"
                android:padding="@dimen/padding_10"
                android:layout_below="@+id/imgClick"
                android:layout_width="match_parent"
                android:layout_height="100dp">

                <LinearLayout
                    android:orientation="horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">


                    <com.kulsoft.care4cute.fonts.OpenSensRegular
                        android:layout_weight="1"
                        android:text="@{medicineModel.medName}"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content">
                    </com.kulsoft.care4cute.fonts.OpenSensRegular>


                    <com.kulsoft.care4cute.fonts.OpenSensSemiBold
                        android:id="@+id/timePill"
                        android:gravity="end"
                        android:layout_weight="1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content">


                    </com.kulsoft.care4cute.fonts.OpenSensSemiBold>

                </LinearLayout>

                <LinearLayout
                    android:orientation="horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <com.kulsoft.care4cute.fonts.OpenSensThin
                    android:layout_weight="1"
                    android:text="@{`1 ` +medicineModel.medType}"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">


                </com.kulsoft.care4cute.fonts.OpenSensThin>

                    <com.kulsoft.care4cute.fonts.OpenSensThin
                        android:layout_weight="1"
                        android:gravity="center"
                        android:text="@{medicineModel.medDose}"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content">
                    </com.kulsoft.care4cute.fonts.OpenSensThin>

                    <com.kulsoft.care4cute.fonts.OpenSensThin
                        android:layout_weight="1"
                        android:gravity="start"
                        android:text="@{medicineModel.medUnit}"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content">

                    </com.kulsoft.care4cute.fonts.OpenSensThin>

                    <com.kulsoft.care4cute.fonts.OpenSensThin
                        android:gravity="end"
                        android:layout_weight="1"
                        android:text="Medication Reminder"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content">


                    </com.kulsoft.care4cute.fonts.OpenSensThin>

                </LinearLayout>


            </LinearLayout>



    </RelativeLayout>

    <View
        android:visibility="gone"
        android:layout_below="@+id/lin_medicine"
        android:layout_width="match_parent"
        android:background="@color/black"
        android:layout_marginTop="@dimen/padding_10"
        android:layout_marginStart="15dp"
        android:layout_marginEnd="15dp"
        android:layout_height="0.1dp"/>
</RelativeLayout>

在XML中,我想根据循环设置在适配器中尝试过的Model类的列表。

预先感谢您,我感谢您的所有回答和评论

1 个答案:

答案 0 :(得分:1)

您已经收到任何错误了吗?

可以在绑定中设置多个变量,从活动/片段或适配器执行此操作时并没有真正的区别。

通常,像第一个一样设置第二个变量-应该可以。但是,我不明白为什么要在其中使用循环在视图中设置文本。

此外,不要忘记在XML中仅使用新变量来构建项目以生成BR属性

public void onBindViewHolder(ViewHolder holder, int position) {
       final AddMedicineData dataModel = dataModelList.get(holder.getAdapterPosition());
holder.itemRowBinding.timePill.setText(dataModel.getPilldates().get(0).getPilltime());
            holder.bind(dataModel);
        }