如何根据其他微调器选择过滤微调器?

时间:2018-03-05 05:43:04

标签: android json

我有3个Spinners citySpinner,regionSpinner,branchSpinner,我可以在spinners中填充数据。问题是如果我从spinnerRegion选择UP然后在citySpinner我想只显示与该区域相关的城市。请帮助我。< / p>

在arraylist中,我现在成功存储数据如何根据微调器选择来比较数据?

 ArrayList<HashMap<String, String>> formList = new ArrayList<HashMap<String, String>>();
            final HashMap<String, String> m_li;
            m_li = new HashMap<String, String>();
            m_li.put("region", region);
            m_li.put("city", city);
            m_li.put("Branch", branch);
            formList.add(m_li);
            Log.d("DDDD----->", String.valueOf(formList));

4 个答案:

答案 0 :(得分:0)

在您的活动中使用此功能:

    final String JsonData = "[ { \"Br.Name\": \"A BRANCH\", \"Region\": \"UP(W)\", \"City\": \"Agra\" }, { \"Br.Name\": \"B BRANCH\", \"Region\": \"UP(W)\", \"City\": \"Bareilly\" }, { \"Br.Name\": \"C\", \"Region\": \"UP(W)\", \"City\": \"Baghpat\" }, { \"Br.Name\": \"D\", \"Region\": \"UP(E)\", \"City\": \"Amhat\" }, { \"Br.Name\": \"SE\", \"Region\": \"UP(E)\", \"City\": \"Bankeyganj\" }, { \"Br.Name\": \"F\", \"Region\": \"UP Central\", \"City\": \"HARDOI\" }, { \"Br.Name\": \"G\", \"Region\": \"UP(W)\", \"City\": \"Ghaziabad\" } ] ";
    spRegion = findViewById(R.id.spRegion);
    spCity = findViewById(R.id.spCity);


    spRegion.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            ArrayAdapter<String> CityAdapter = new ArrayAdapter<String>(Main2Activity.this, R.layout.support_simple_spinner_dropdown_item, getCity(JsonData, spRegion.getSelectedItem().toString()));
            spCity.setAdapter(CityAdapter);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

请在此课程代码中替换您的城市来源:

 public List<String> getCity(String JsonData, String SelectedRegion) {

    List<String> SpCityList = new ArrayList<>();
    String[] citys;
    try {
        JSONArray Array = new JSONArray(JsonData);

        for (int k = 0; k < Array.length(); k++) {

            try {
                JSONObject object = Array.getJSONObject(k);
                String Region = object.getString("Region");
                String City = object.getString("City");

                if (Region.equals(SelectedRegion)) {
                    SpCityList.add(City);
                }
            } catch (JSONException e) {
                e.printStackTrace();

            }
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }


    return SpCityList;
}

答案 1 :(得分:0)

解析时,那时你必须进行映射 对于前HashMap&gt; regionToCity = new HashMap&lt;&gt;(); regionToCity.put(&#34; UP&#34;,包含Up&#39; s城市的arralist); //这必须在解析时完成。

看起来像

regionSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String regionName = regiponList.get(position);
            cityList = regionToCity.get(regionName);
            //setAdapter of city spinner
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

希望你明白我在说什么。试试这个,然后让我知道

这是你理解的一个例子。你想要实现的目标。

答案 2 :(得分:0)

解析时必须根据json管理数据

您必须更改您的json响应,如

{"UP":[
    {
        "Agra": [
                    {"Br.Name": "A BRANCH"},
                    {"Br.Name": "B BRANCH"},
                    {"Br.Name": "C BRANCH"}
                ]
    },
    {
        "Bareilly": 
                [
                    {"Br.Name": "A BRANCH"},
                    {"Br.Name": "B BRANCH"},
                    {"Br.Name": "C BRANCH"}
                ]
    }
],
"MP":[
    {
        "INDORE": [
                    {"Br.Name": "A BRANCH"},
                    {"Br.Name": "B BRANCH"},
                    {"Br.Name": "C BRANCH"}
                ]
    },
    {
        "BHOPAL": 
                [
                    {"Br.Name": "A BRANCH"},
                    {"Br.Name": "B BRANCH"},
                    {"Br.Name": "C BRANCH"}
                ]
    }
]
}

然后您可以使用区域到城市列表进行映射&amp;城市到分支列表

答案 3 :(得分:0)

如果要根据代码下面使用的其他微调器值显示微调器值,例如....

 private void setSpinser() {
    spCity = findViewById(R.id.city);
    spRegion = findViewById(R.id.reigon);
    List<String> cityName = new ArrayList<>();
    final List<String> regionName = new ArrayList<>();
    final ArrayAdapter<String> regionAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
    cityName.add("Select city");
    cityName.add("Ahmadabad");
    cityName.add("Surat");
    cityName.add("Delhi");
    ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<String>(DbInsert.this, android.R.layout.simple_list_item_1, cityName);
    spCity.setAdapter(stringArrayAdapter);
    spCity.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            switch (spCity.getSelectedItem().toString())
            {
                case "Ahmadabad":
                    regionName.add("Abc");
                    regionName.add("cde");
                    regionName.add("efg");
                    regionAdapter.addAll(regionName);
                    spRegion.setAdapter(regionAdapter);
                    break;
                case "Surat":
                    regionName.add("pqr");
                    regionName.add("stu");
                    regionName.add("xyz");
                    regionAdapter.addAll(regionName);
                    spRegion.setAdapter(regionAdapter);
                    break;

            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });
}

上面的方法根据选中的第一个微调器值设置第二个微调器值,此方法在oncreate方法中调用mainactivity。