微调器onItemSelected仅返回数组的最后一项

时间:2019-02-18 08:59:11

标签: android android-spinner

我正在尝试在应用中实现多个微调器,其中在凌空调用后填充数据。它应该这样工作:基于对第一个微调器值interface的选择,第二个微调器应使用所选"id"作为参数从另一个api调用填充其值。 现在,我可以在微调器中显示"id"。但不确定如何为第二个api调用获取所选项目的"name"。现在,当我在第一个微调器中选择任何项目时,它仅返回数组中最后一个项目的id

Json阵列响应:

id

FirstLevel (模型)

[
  {
     "id":1,
     "name":"Roger Federer",
     "country":"Switzerland",
     "city":"Basel"

  },
  {
     "id":2,
     "name":"Rafael Nadal",
     "country":"Spain",
     "city":"Madrid"
  },
  {
     "id":3,
     "name":"Novak Djokovic",
     "country":"Serbia",
     "city":"Monaco"
  },
  {
     "id":4,
     "name":"Andy Murray",
     "country":"United Kingdom",
     "city":"London"
  },
  {
     "id":5,
     "name":"Maria Sharapova",
     "country":"Russia",
     "city":"Moscow"
  },
  {
     "id":8,
     "name":"Ana Ivanovic",
     "country":"Serbia",
     "city":"Belgrade"
  }
]

Java代码

public class FirstLevel {


public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

private String title;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

private int id;
}

2 个答案:

答案 0 :(得分:1)

您的这一行

selectedFirstLevel= //How to get the 'id' of the selected item here?

将是

selectedFirstLevel = FirstLevelDataAdapterClassList.get(position).getId();

尝试一下。谢谢

答案 1 :(得分:0)

FirstLevel GetFirstLvDataModel = new FirstLevel(); 

应该在forloop中声明,并且适配器在循环之外。

尝试此方法->

public void FIRST_PARSE_DATA_AFTER_WEBCALL(JSONArray array, final ViewHolder viewHolder) {

    FirstLevelDataAdapterClassList = new ArrayList<>();


    for (int i = 0; i < array.length(); i++) {

        JSONObject json = null;
        try {
            json = array.getJSONObject(i);
            FirstLevel GetFirstLvDataModel = new FirstLevel(); // Define class object here
            GetFirstLvDataModel.setId(json.getString("id"));
            GetFirstLvDataModel.setName(json.getString("name"));
            FirstLevelDataAdapterClassList.add(GetFirstLvDataModel);
            names.add(FirstLevelDataAdapterClassList.get(i).getTitle().toString());

        } catch (JSONException e) {

            e.printStackTrace();
        }
    } // Close for loop here
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(context, simple_spinner_item, names);
    spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view
    viewHolder.spinFirst.setAdapter(spinnerArrayAdapter);

    viewHolder.spinFirst.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {


            selectedFirstLevel=FirstLevelDataAdapterClassList.get(position).getId();

            Log.i("FLFL",selectedFirstLevel);
            SECOND_LEVEL_WEB_CALL(viewHolder,selectedFirstLevel);
        }

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

        }
    });
}