【问题标题】:How to get spinners selected item's id that comes from JSON如何获取来自 JSON 的微调器选定项目的 id
【发布时间】:2018-10-11 12:50:59
【问题描述】:

我有两个微调器,第二个微调器的值取决于第一个微调器。 spinner 中的每个项目都有一个来自 JSON 的 id。现在,我想获取第二个微调器的项目 ID。我得到所选项目的名称,但我需要所选项目的名称和 ID。

call.enqueue(new Callback<Map<String, ResponseJSON2>>()
{
        @Override
        public void onResponse
                (Call<Map<String, ResponseJSON2>> call, retrofit2.Response<Map<String, ResponseJSON2>> response) {
            responseJson = response.body();
            if (responseJson != null) {
                for (Map.Entry<String, ResponseJSON2> e : responseJson.entrySet()) {
                    provincesList.add(e.getKey());
                    for (Model c : e.getValue().getModel()) {
                        citiesList.add(c.getName());
                   }
               }
           }
          createAdapter();
      }
}

谢谢。

模型.java

public class Model {

    private String id;
    private String name;
    private String taxonomy;
    private String description;
    private String images;
    private String parent;
    //getter and setters

    @Override
    public String toString() {
        return "model{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", taxonomy='" + taxonomy + '\'' +
                ", description='" + description + '\'' +
                ", images='" + images + '\'' +
                ", parent='" + parent + '\'' +
                '}';
    }
}

【问题讨论】:

  • 城市列表是字符串类型的?
  • @UmangBurman no , private ArrayList cityList = new ArrayList();
  • 您还需要存储 ids 的 int 数组列表。
  • 我觉得一定是hashmap @UmangBurman
  • 是的,为 ids 创建一个 hashmap。然后你就可以得到id

标签: android spinner


【解决方案1】:

您也必须为城市创建一个Listener

spinner_city.setOnItemSelectedListener(citiesListener);

然后使用此代码,您可以获得cityId

private AdapterView.OnItemSelectedListener citiesListener = new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String citySelected = spinner_city.getItemAtPosition(position).toString();
            String provinceSelected = spinner_province.getSelectedItem().toString();
            for(Map.Entry<String, ResponseJSON> e : responseJson.entrySet())
            {
                if(e.getKey().equals(provinceSelected)){
                    for(City c : e.getValue().getCity()){
                        if(citySelected.equals(c.getCityName())){
                            tv_city_id.setText(String.format("City id for %s is %s", citySelected, c.getCityId()));
                        }
                    }
                }
            }
        }

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

        }
    };

【讨论】:

  • 感谢它的工作原理,但我对城市微调器零位置的项目有问题。当城市微调器只有一项时,textview 的值没有改变。我试过这个代码** spinner_city.setSelection( 0); ** 但没有改变。
  • 现在有什么问题??
  • 对于某些省份只有一个城市,当我选择这些省份时,我无法获得城市的 id 实际上我认为 ** spinner_city.setOnItemSelectedListener(citiesListener);** not call for position ==0 ,我想唯一的方法是添加一个字符串作为微调器的默认项可以解决它
  • 是的..你必须手动选择它,即使它是唯一的也尝试选择它
  • 虽然你可以得到id,但是你不能在屏幕上显示它,所以你可以用ID做一些事情,你想用那个ID做什么?
【解决方案2】:

可以替换活动完整代码

public class MainActivity extends AppCompatActivity {

        private ApiInterface apiService;
        private Spinner spinner_province;
        private Spinner spinner_city;
        private ArrayAdapter<String> provinceAdapter;
        private ArrayAdapter<String> cityAdapter;
        private ArrayList<String> provincesList = new ArrayList<>();
        private ArrayList<String> citiesList = new ArrayList<>();
        private ArrayList<String> citiesIdList = new ArrayList<>();
        private Map<String, ResponseJSON> responseJson;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            initUI();

            apiService = ApiClient.getClient().create(ApiInterface.class);

            Call<Map<String, ResponseJSON>> call = apiService.getProvinceAndCity();
            call.enqueue(new Callback<Map<String, ResponseJSON>>() {
                @Override
                public void onResponse(Call<Map<String, ResponseJSON>> call, Response<Map<String, ResponseJSON>> response) {
                    responseJson = response.body();
                    for (Map.Entry<String, ResponseJSON> e : responseJson.entrySet()) {
                        provincesList.add(e.getKey());

                        for (City c : e.getValue().getCity()) {
                            citiesList.add(c.getCityName());
                        }
                    }
                    createAdapter();
                }

                @Override
                public void onFailure(Call<Map<String, ResponseJSON>> call, Throwable t) {

                }
            });
        }

        private void initUI() {
            spinner_city = findViewById(R.id.spinner_cities);
            spinner_province = findViewById(R.id.spinner_provinces);
        }

        private void createAdapter() {

            provinceAdapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_spinner_dropdown_item, provincesList);

            provinceAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner_province.setAdapter(provinceAdapter);
            cityAdapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_spinner_dropdown_item, citiesList);

            cityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner_city.setAdapter(cityAdapter);

            spinner_province.setOnItemSelectedListener(provinceListener);

            spinner_city.setOnItemSelectedListener(citiesListener);


        }

        private AdapterView.OnItemSelectedListener provinceListener = new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                citiesList.clear();
                citiesIdList.clear();
                String provinceSelected = spinner_province.getItemAtPosition(position).toString();
                for (Map.Entry<String, ResponseJSON> e : responseJson.entrySet()) {
                    if (e.getKey().equals(provinceSelected)) {
                        for (City c : e.getValue().getCity()) {
                            citiesList.add(c.getCityName());
                            citiesIdList.add(c.getCityId());


                        }
                    }
                }
                cityAdapter.notifyDataSetChanged();
            }

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

            }
        };


        private AdapterView.OnItemSelectedListener citiesListener = new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                int city_id = Integer.parseInt(citiesIdList.get(position));
                Log.i("your_city_id", String.valueOf(city_id));

            }

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

            }
        };

    }

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 2017-12-28
相关资源
最近更新 更多