【问题标题】:Populate spinner based on selection in other spinner根据其他微调器中的选择填充微调器
【发布时间】:2016-05-04 13:44:55
【问题描述】:

我正在尝试将数据从服务器获取到微调器,我的 json 对象是

{"result":{"AndhrPradesh":["Jayamahal","ABC","JP nagar"],"Mumbai":["XYZ","PQR"],"Pune":["123","Hi"]}}

我能够在一个微调器中获得 AndhraPradesh、Mumbai 和 Pune 的值。现在我的问题是在选择城市后我想在该城市显示相应的数据。 例如,如果从一个微调器中选择 Mumbai,我想在另一个微调器中显示 XYZ、PQR,请帮助我。

【问题讨论】:

  • 提供一些修改代码
  • 创建一个容器来保存城市的相关信息并将其传递给第二个微调器。

标签: android android-spinner


【解决方案1】:

首先像这样解析json数据

JSONObject jsonObject = response.getJSONObject("data");
JSONArray cityName= jsonObject.getJSONArray("AndhrPradesh")
for(i=0;i<cityName.length();i++){
//your inner string of the Array
}

然后

citynameSpinner.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //here set the values to another spinner
            }
        });

【讨论】:

  • 感谢您的回复,这里我的城市名称是通过服务器动态更改的,根据城市选择我需要显示来自服务器的相应数据。提前感谢任何帮助。
【解决方案2】:

请使用此代码sn-p

public class SpinnerFilterActivity extends AppCompatActivity {
private ArrayAdapter<String> mArrayAdapter;
private Spinner mMainSPN;
private ArrayList<String> mSpinnerArray;
private Map<String,ArrayList<String>> innterDataMap;
private Spinner mInnerSPN;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mSpinnerArray = new ArrayList<String>();
    innterDataMap = new HashMap<String, ArrayList<String>>();
    mMainSPN = (Spinner) findViewById(R.id.spn_main);
    mInnerSPN = (Spinner) findViewById(R.id.spn_inner);

    mMainSPN.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String key = mSpinnerArray.get(position);
            ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(SpinnerFilterActivity.this,android.R.layout.simple_spinner_item,innterDataMap.get(key));
            mInnerSPN.setAdapter(arrayAdapter);
        }

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

        }
    });
    parseJson();
}

private void parseJson() {
    String s= "{\"result\":{\"AndhrPradesh\":[\"Jayamahal\",\"ABC\",\"JP nagar\"],\"Mumbai\":[\"XYZ\",\"PQR\"],\"Pune\":[\"123\",\"Hi\"]}}\n";
    try {
        JSONObject jsonObject = new JSONObject(s);
        JSONObject obj= jsonObject.getJSONObject("result");
        Iterator<String> stringIterator = obj.keys();
        while (stringIterator.hasNext()){
            String key = stringIterator.next();
            mSpinnerArray.add(key);
            JSONArray jsonArray = obj.getJSONArray(key);
            ArrayList<String> innerList = new ArrayList<>();
            for (int i=0;i<jsonArray.length();i++){
                innerList.add(String.valueOf(jsonArray.get(i)));
            }
            innterDataMap.put(key,innerList);
        }
        populateDataInSpinner();
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

private void populateDataInSpinner() {
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,mSpinnerArray);
    mMainSPN.setAdapter(arrayAdapter);
  }
}

在这段代码中,我将数据保存在 2 个字段中,一个是 mSpinnerArray 以显示 aster 列表,另一个是映射,其中内部列表代表键作为父值保存。每当调用 onOptionItemSelected 方法时,我代表从主列表中选择的项目从地图中获取内部数据列表,因为它作为 innerMap 数据中的键工作。我希望我很清楚。让我知道是否有任何问题。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多