【发布时间】:2021-01-19 18:08:38
【问题描述】:
我有一个产品详细信息,其中包含一些变体列表和变体内部我还有另一个变体选项列表。
"product": {
"id": 1,
"name": "Rangs 2 Ton Inverter AC",
"price": 99900,
"variations": [
{
"id": 2,
"title": "Color",
"required": true,
"selection_type": 2,
"options": [
{
"id": 5,
"name": "White",
"price": 100,
"price_type": 1
},
{
"id": 6,
"name": "Black",
"price": 500,
"price_type": 1
},
{
"id": 7,
"name": "Red",
"price": 50,
"price_type": 1
},
{
"id": 8,
"name": "Cream",
"price": 0,
"price_type": 1
}
]
},
{
"id": 3,
"title": "size",
"required": true,
"selection_type": 1,
"options": [
{
"id": 9,
"name": "2",
"price": 1000,
"price_type": 1
},
{
"id": 10,
"name": "5",
"price": 10000,
"price_type": 1
},
{
"id": 11,
"name": "10",
"price": 15000,
"price_type": 1
}
]
},
{
"id": 4,
"title": "Box",
"required": true,
"selection_type": 1,
"options": [
{
"id": 12,
"name": "below 50 kg",
"price": 10,
"price_type": 2
},
{
"id": 13,
"name": "over 50 kg",
"price": 15,
"price_type": 2
}
]
}
]
}
我的模型课
public class Variation {
private int id;
private String title;
private boolean isRequired;
private int type;
private ArrayList<VariationOption> variationOptionArrayList;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public boolean isRequired() {
return isRequired;
}
public void setRequired(boolean required) {
isRequired = required;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public ArrayList<VariationOption> getVariationOptionArrayList() {
return variationOptionArrayList;
}
public void setVariationOptionArrayList(ArrayList<VariationOption> variationOptionArrayList) {
this.variationOptionArrayList = variationOptionArrayList;
}
@Override
public String toString() {
return "Variation{" +
"id=" + id +
", title='" + title + '\'' +
", isRequired=" + isRequired +
", type=" + type +
", variationsOptionArrayList=" + variationOptionArrayList +
'}';
}
}
我的其他模型类
public class VariationOption {
private int id;
private String name;
private double price;
private int priceType;
private boolean isChecked;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getPriceType() {
return priceType;
}
public void setPriceType(int priceType) {
this.priceType = priceType;
}
public boolean isChecked() {
return isChecked;
}
public void setChecked(boolean checked) {
isChecked = checked;
}
}
变体选项是复选框。我的目标是设置数据并在片段中获取选定的变体选项。
我的尝试
我在 UI 中使用了两个适配器来表示数据。
第一个变体适配器包含另一个回收器视图和另一个变体选项适配器。
变体列表适配器
public class ProductVariationListAdapter extends RecyclerView.Adapter<ProductVariationListAdapter.ViewHolder> {
private Context context;
private ArrayList<Variation> variationArrayList;
public ProductVariationListAdapter(Context context, ArrayList<Variation> variationArrayList) {
this.context = context;
this.variationArrayList = variationArrayList;
}
@NonNull
@Override
public ProductVariationListAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_each_row_product_variation, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ProductVariationListAdapter.ViewHolder holder, int position) {
Variation variation = variationArrayList.get(position);
holder.labelProductVariationTitle.setText(variation.getTitle());
if (variation.isRequired()) {
holder.labelProductVariationRequired.setVisibility(View.VISIBLE);
} else {
holder.labelProductVariationRequired.setVisibility(View.GONE);
}
LinearLayoutManager layoutManager = new LinearLayoutManager(context);
holder.recyclerViewProductVariationOption.setLayoutManager(layoutManager);
holder.recyclerViewProductVariationOption.setHasFixedSize(true);
holder.recyclerViewProductVariationOption.setNestedScrollingEnabled(false);
ProductVariationOptionListAdapter adapter = new ProductVariationOptionListAdapter(context, variation.getVariationOptionArrayList());
holder.recyclerViewProductVariationOption.setAdapter(adapter);
}
@Override
public int getItemCount() {
return variationArrayList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView labelProductVariationTitle;
private TextView labelProductVariationRequired;
private RecyclerView recyclerViewProductVariationOption;
public ViewHolder(@NonNull View itemView) {
super(itemView);
labelProductVariationTitle = itemView.findViewById(R.id.labelProductVariationTitle);
labelProductVariationRequired = itemView.findViewById(R.id.labelProductVariationRequired);
recyclerViewProductVariationOption = itemView.findViewById(R.id.recyclerViewProductVariationOption);
}
}
}
变体选项列表适配器
public class ProductVariationOptionListAdapter extends RecyclerView.Adapter<ProductVariationOptionListAdapter.ViewHolder> {
private Context context;
private ArrayList<VariationOption> variationOptionArrayList;
public ProductVariationOptionListAdapter(Context context, ArrayList<VariationOption> variationOptionArrayList) {
this.context = context;
this.variationOptionArrayList = variationOptionArrayList;
}
@NonNull
@Override
public ProductVariationOptionListAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_each_row_product_variations_option, parent, false);
return new ProductVariationOptionListAdapter.ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ProductVariationOptionListAdapter.ViewHolder holder, int position) {
VariationOption variationOption = variationOptionArrayList.get(position);
holder.tvOptionPricing.setText(variationOption.getPrice() + " " + context.getResources().getString(R.string.bdt));
holder.checkBoxOption.setText(variationOption.getName());
if (variationOption.isChecked()) {
holder.checkBoxOption.setChecked(true);
} else {
holder.checkBoxOption.setChecked(false);
}
}
@Override
public int getItemCount() {
return variationOptionArrayList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private final CheckBox checkBoxOption;
private final TextView tvOptionPricing;
public ViewHolder(@NonNull View itemView) {
super(itemView);
checkBoxOption = itemView.findViewById(R.id.checkBoxOption);
tvOptionPricing = itemView.findViewById(R.id.tvOptionPricing);
//checkbox click event handling
checkBoxOption.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
Toast.makeText(context, "selected " + checkBoxOption.getText(), Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "unselected " + checkBoxOption.getText(), Toast.LENGTH_LONG).show();
}
}
});
}
}
那么我怎样才能在片段中实现选中和未选中的监听器,或者我怎样才能实现这个功能?
【问题讨论】:
-
你应该把你的截图从链接中拿出来放在实际的问题中。
-
@GenoC 我没有足够的声望上传问题内的图片
标签: java android checkbox android-recyclerview android-checkbox