android - Spinner onItemSelected 仅返回数组的最后一项

标签 android android-spinner

我正在尝试在应用程序中实现多个微调器,其中数据是在 Volley 调用后填充的。它应该以这样的方式工作;基于第一个微调器值 "id" 的选择,第二个微调器应该从另一个 api 调用中填充它的值,将所选的 "id" 作为参数。 我现在可以在微调器中显示 "name"(s) 了。但不确定如何为第二次 api 调用获取所选项目的 id。现在,当我在第一个微调器中选择任何项目时,它只返回数组中最后一个项目的 id

Json 数组响应:

[
  {
     "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"
  }
]

一级(模型)

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

Java代码

private ArrayList<String> names = new ArrayList<String>();

private ArrayList<FirstLevel> FirstLevelDataAdapterClassList;

private int selectedFirstLevel;
...
public void FIRST_LEVEL_WEB_CALL(final ViewHolder viewHolder) {

    //showSimpleProgressDialog(context, "Loading...", "Fetching Json", false);
    JsonArrayRequest jsArrRequest = new JsonArrayRequest
            (Request.Method.GET, HTTP_SERVER_URL, null, new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    FIRST_PARSE_DATA_AFTER_WEBCALL(response,viewHolder);
                    Log.i("FL", "FL");
                    //removeSimpleProgressDialog();

                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    // TODO Auto-generated method stub

                }
            }) {

    };

    requestQueue2 = Volley.newRequestQueue(context);
    requestQueue2.add(jsArrRequest);

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

    FirstLevelDataAdapterClassList = new ArrayList<>();

    FirstLevel GetFirstLvDataModel = new FirstLevel();

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

        JSONObject json = null;
        try {
            json = array.getJSONObject(i);
            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();
        }

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

            }
        });
    }

}

最佳答案

你的这条线

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

会是

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

试试这个。谢谢

关于android - Spinner onItemSelected 仅返回数组的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54743581/

相关文章:

android - 如何从android中的另一个应用程序资源更改主题?

android - Fragment 中微调器的 setOnItemSelectedListener

android.R.simple_spinner_adapter 无法解析

android - 是否可以为旋转下拉菜单设置动画?

java - 在 Spinner 小部件中设置所选项目

java - 获取位置仅获取UI线程上的位置(GPS位置)

java - com.google.android.gms.location.LocationListener 无法转换为 android.location.LocationListener

Android - 它如何运行以及如何使用 eclipse?

android - 可以通过编程设置LayoutParams为fragment吗

android - 如何更改操作栏 NAVIGATION_MODE_LIST 中的 'little triangle color'