如何在微调器上分配嵌套数组数据?

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 属性及其选项,并在第二个微调器中加载其选项的清理属性。

以上是关于如何在微调器上分配嵌套数组数据?的主要内容,如果未能解决你的问题,请参考以下文章

Android SQLite 在选定的微调器上显示特定行

在颤动中 - 我如何最好地处理和分配预先确定的键给 json 中的嵌套列表/数组

如何在微调器项目之间显示分隔符?

创建应用程序按钮未生成应用程序,卡在微调器上

BigQuery - 如何取消嵌套多个数组,并从一列分配值?

如何使用javascript在嵌套对象数组中按属性分配值