如何在微调器上分配嵌套数组数据?
Posted
技术标签:
【中文标题】如何在微调器上分配嵌套数组数据?【英文标题】:How to assign nested array data on spinner? 【发布时间】:2019-08-17 23:05:09 【问题描述】:我正在调用这个数组,我得到了价值,但我无法在微调器上赋值。
这是我的数组数据。
"data":
"id": "105",
"prod_id": "FMSP-6815",
"prod_cat_id": "4",
"prod_name": "Aakash Fish",
"prod_price": "1",
"is_avlbl": "0",
"prod_weight": "500,1000",
"prod_quantity": "0",
"prod_desc": "Eat at your own risk",
"prod_image": "medicine.jpg",
"created_at": "2019-03-26 17:33:26",
"updated_at": "2019-03-26 17:33:26",
"bone_type": "0",
"skin_type": "0",
"cut_type": "0",
"cat_name": "ready_to_eat",
"prod_attributes": [
"id": "15",
"name": "Size",
"attribute_options": [
"id": "15",
"attribute_id": "15",
"attribute_name": "size",
"prod_id": "105",
"attr_option_id": "8",
"option_price": "10",
"option_name": "Large"
]
,
"id": "14",
"name": "Clean",
"attribute_options": [
"id": "16",
"attribute_id": "14",
"attribute_name": "clean",
"prod_id": "105",
"attr_option_id": "6",
"option_price": "5",
"option_name": "Skinny"
,
"id": "20",
"attribute_id": "14",
"attribute_name": "Clean",
"prod_id": "105",
"attr_option_id": "7",
"option_price": "30",
"option_name": "White Skin"
]
,
"id": "7",
"name": "Cut",
"attribute_options": [
"id": "18",
"attribute_id": "7",
"attribute_name": "Cut",
"prod_id": "105",
"attr_option_id": "4",
"option_price": "20",
"option_name": "Medium"
]
]
这是我的数组 和 这就是我从 API 调用的方式。 这是我的 Java 代码。我在for循环中使用了for循环。
if (response.body().getDescriptionResponseData().getSuccess().equals("200"))
attributeData = response.body().getDescriptionResponseData().getP_data().getAttributeData();
attribute_array_size = attributeData.size();
if (attributeData.size() == 0)
p_attribute.setVisibility(View.GONE);
else
p_attribute.setVisibility(View.VISIBLE);
// Loading attribute options
for (int j=0;j<attributeData.size();j++)
attributeOptions = response.body().getDescriptionResponseData().getP_data().getAttributeData().get(j).getAttributeOptionsData();
//String option = attributeOptions.get(j).getOption_name();
// Log.e("options",option);
dateList.clear();
dateList.add("Select");
for (int k=0;k<attributeOptions.size();k++)
String attribute_id = attributeOptions.get(k).getAttribute_id();
String option_name = attributeOptions.get(k).getOption_name();
String option_price = attributeOptions.get(k).getOption_price();
dateList.add(option_name);
//Log.e("option_id",attribute_id);
//Log.e("option_name",option_name);
// Log.e("option_price",option_price);
ArrayAdapter dateArrayAdapter = new ArrayAdapter(getContext(),R.layout.date_dialog, R.id.textDate, dateList);
holder.attribute_option_spinner.setAdapter(dateArrayAdapter);
【问题讨论】:
【参考方案1】:根据您提出的问题,我假设您的微调器显示最后一个值。您的代码有两个问题。
1- dateList.clear();
和 dateList.add("Select");
应该在 for 循环之外
2- 在将所有值分配给 arrayList 后,在 for 循环外设置微调器适配器
您可以在下面查看进展情况
if (response.body().getDescriptionResponseData().getSuccess().equals("200"))
attributeData = response.body().getDescriptionResponseData().getP_data().getAttributeData();
attribute_array_size = attributeData.size();
if (attributeData.size() == 0)
p_attribute.setVisibility(View.GONE);
else
p_attribute.setVisibility(View.VISIBLE);
// Loading attribute options
dateList.clear();
dateList.add("Select");
for (int j=0;j<attributeData.size();j++)
attributeOptions = response.body().getDescriptionResponseData().getP_data().getAttributeData().get(j).getAttributeOptionsData();
//String option = attributeOptions.get(j).getOption_name();
// Log.e("options",option);
for (int k=0;k<attributeOptions.size();k++)
String attribute_id = attributeOptions.get(k).getAttribute_id();
String option_name = attributeOptions.get(k).getOption_name();
String option_price = attributeOptions.get(k).getOption_price();
dateList.add(option_name);
//Log.e("option_id",attribute_id);
//Log.e("option_name",option_name);
// Log.e("option_price",option_price);
if (dateList.size() > 0)
ArrayAdapter dateArrayAdapter = new ArrayAdapter(getContext(), R.layout.date_dialog, R.id.textDate, dateList);
holder.attribute_option_spinner.setAdapter(dateArrayAdapter);
【讨论】:
感谢您的帮助。我应该在哪里打破我的 for 循环。因为我的 Size 属性有 1 个值,而 Clean 属性有 2 个值等等。请告诉我我在哪里打破了我的 for 循环。 你有 size 和 clean 属性,要么你必须使用两个单独的微调器,要么如果一个微调器,那么你应该知道打破循环的点。 我正在使用 Recycerview 来显示它们,所以我只有一个微调器,请告诉我我在哪里休息。如果我在第二个循环中指向中断,则它没有加载完整的数据。 您想加载具有两个属性(干净和大小)的微调器? 我正在动态获取属性及其选项,因此我必须在一个微调器中加载 Size 属性及其选项,并在第二个微调器中加载其选项的清理属性。以上是关于如何在微调器上分配嵌套数组数据?的主要内容,如果未能解决你的问题,请参考以下文章
在颤动中 - 我如何最好地处理和分配预先确定的键给 json 中的嵌套列表/数组