[英]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.