如何解决如何在片段中获取选中/未选中的数据,其中适配器内的适配器内的复选框?
我有一个产品详细信息,其中包含一些变体列表,而在变体内部,我有另一个变体选项列表。
"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,{
"id": 7,"name": "Red","price": 50,{
"id": 8,"name": "Cream","price": 0,"price_type": 1
}
]
},{
"id": 3,"title": "size","selection_type": 1,"options": [
{
"id": 9,"name": "2","price": 1000,{
"id": 10,"name": "5","price": 10000,{
"id": 11,"name": "10","price": 15000,{
"id": 4,"title": "Box","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,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();
}
}
});
}
}
那么如何在片段内实现选中和未选中的侦听器或如何实现此功能?
解决方法
首先在你的采用者内部声明接口:
interface SelectedListener(){
public void getCheckbox(int position)
}
SelectedListener selectedListener;
public ProductVariationOptionListAdapter(Context context,ArrayList<VariationOption> variationOptionArrayList,SelectedListener selectedListener ) {
this.context = context;
this.variationOptionArrayList = variationOptionArrayList;
this.selectedListener=seletedListener
}
现在向您的 onBindViewHolder
调用接口方法:
if (variationOption.isChecked()) {
holder.checkBoxOption.setChecked(true);
selectedListener.getCheckbox(position)
} else {
holder.checkBoxOption.setChecked(false);
}
最后在您的片段内部调用适配器并实现 getCheckbox 方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。