在我的第一个微调器位置发生变化后,我的第二个微调器适配器未更新

时间:2016-10-11 06:52:04

标签: android json spinner adapter

我有两个微调器,第一个微调器与第二个微调器有关。

我正在使用JSON为两者填充适配器。

当我启动活动时,两个适配器都已经填充了正确的数据(第一个和第二个适配器是相关的)。

但是,当我尝试更改第一个微调器的项目位置时,第二个微调器的适配器仍然包含第一个加载的数据。

我想要的是,当第一个微调器的项位置发生变化时,第二个微调器的适配器可以动态地包含与第一个微调器相关的数据。

我不知道问题是什么,我真的需要一些帮助。

这是我的代码:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
    {
        @Override
        public void onItemSelected (AdapterView < ? > parent, View view,int position, long id){
                try {
                    JSONObject json = result.getJSONObject(position);
                    result = json.getJSONArray("all_state");
                    state.clear();
                    for (int i = 0; i < result.length(); i++) {
                        try {
                            JSONObject json2 = result.getJSONObject(i);
                            state.add(json2.getString("state"));
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            adapter = new ArrayAdapter<>(ViewState.this, R.layout.spinner_state, state);
            adapter.notifyDataSetChanged();
            spinner2.setAdapter(adapter);
        }

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

1 个答案:

答案 0 :(得分:0)

它已经解决了,问题是因为我把JSONObject和JSONArray放到同一个变量“result”中。

所以这是正确的代码:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
    @Override
    public void onItemSelected (AdapterView < ? > parent, View view,int position, long id){
            try {
                JSONObject json = result.getJSONObject(position);
                result2 = json.getJSONArray("all_state");
                state.clear();
                for (int i = 0; i < result2.length(); i++) {
                    try {
                        JSONObject json2 = result2.getJSONObject(i);
                        state.add(json2.getString("state"));
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        adapter = new ArrayAdapter<>(ViewState.this, R.layout.spinner_state, state);
        adapter.notifyDataSetChanged();
        spinner2.setAdapter(adapter);
    }

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