我需要在单个回收器视图中添加两个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类的列表。
预先感谢您,我感谢您的所有回答和评论
答案 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);
}