简体   繁体   English

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

[英]How to filter spinner based on other spinner selection?

I have 3 Spinners citySpinner, regionSpinner,branchSpinner,i am able populate the data in spinners.The Problem is if i selected UP from spinnerRegion then in citySpinner i want show only citys related to that region only.Please help me.我有 3 个 Spinners citySpinner、regionSpinner、branchSpinner,我可以在 Spinners 中填充数据。问题是如果我从 SpinnerRegion 中选择了 UP,那么在 citySpinner 我只想显示与该地区相关的城市。请帮助我。

In arraylist i am successfully storing data now how to compare that data based on spinner selection?在 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));

use this in your activity:在您的活动中使用它:

    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) {

        }
    });

and please replace your citys source in this class code:并请在此类代码中替换您所在城市的来源:

 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;
}

When you parsing then that time to you have to make mapping For ex HashMap> regionToCity = new HashMap<>();当您解析时,您必须进行映射 For ex HashMap> regionToCity = new HashMap<>(); regionToCity.put("UP", arralist containing Up's city); regionToCity.put("UP", arralist 包含 Up 的城市); // this have to be done while you parsing. // 这必须在解析时完成。

Look like看起来像

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) {

        }
    });

Hope you understand what i am saying.希望你明白我在说什么。 try this and then let me know试试这个然后让我知道

Its a example for your understanding.它是您理解的示例。 what you want to achieve.你想要达到的目标。

You have to manage data according to your json while you parsing解析时必须根据json管理数据

or或者

You have to change your json response like你必须改变你的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"}
                ]
    }
]
}

and then you can make mapping with region to city list & city to branch list然后您可以将区域映射到城市列表和城市到分支列表

if you want to show a spinner value based on some other spinner value used below code for example ....如果您想根据以下代码中使用的其他一些微调器值显示微调器值,例如....

 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) {

        }
    });
}

above method set second spinner value based on first spinner value selected and this method call in mainactivity in oncreate method.上述方法根据选择的第一个微调器值设置第二个微调器值,并且此方法在 oncreate 方法的 mainactivity 中调用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM