Как получить идентификатор выбранного элемента из JSON в Spinner?

Как получить идентификатор из JSON в spinner?

я хочу получить идентификатор города, если я выберу элемент в счетчике

пример: https://imgur.com/shvfvnO, если я выберу "ACEH BARAT", я получу идентификатор "512"

public void displayCities(List<CityResponse.City> cities) {
        for (CityResponse.City city : cities) {
            Log.d(TAG, city.getNama());
            spinnerItem.add(city.getNama());
            adapter.notifyDataSetChanged();
        }

    }
private void setSpinner(Context context){
        adapter = new ArrayAdapter<>(context, R.layout.spinner_item, spinnerItem);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mainBinding.spinnerCity.setAdapter(adapter);
        mainBinding.spinnerCity.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String citySelected = parent.getItemAtPosition(position).toString();
                Toast.makeText(context, "City : " + citySelected, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                Toast.makeText(context, "Not Selected", Toast.LENGTH_LONG).show();
            }
        });
    }

в onItemSelected просто используйте позицию cities.get(position).getId()

lvl4fi4 15.06.2019 07:27

@afdal-dev, почему бы вам не создать собственный адаптер, вы также можете изменить макет, чтобы ваш счетчик выглядел лучше [androidexample.com/… и (zoftino.com/android-spinner-custom-adapter-&-layout)

Nasreen Ustad 15.06.2019 08:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
172
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вам нужно обновить mainBinding.spinnerCity.setOnItemSelectedListener() внутри метода setSpinnner(), как я добавил ниже:

    private void setSpinner(Context context){
    adapter = new ArrayAdapter<>(context, R.layout.spinner_item, spinnerItem);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mainBinding.spinnerCity.setAdapter(adapter);
    mainBinding.spinnerCity.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            //Comment by Hari: You have already position available here so why you are doing this..
            //String citySelected = parent.getItemAtPosition(position).toString();

            /*Comment by Hari: If CityModel is the model of your cities ArrayList then it can be received inside spinner from the same index position as of the item as you are creating spinnerItemList in loop and both the list item position will be synced. */
            CityModel cityModel = cities.get(position); 

            String citySelected = cityModel.getCity(); //Where cities is the main array in your activity class.
            String cityId = cityModel.getCityId();

            Toast.makeText(context, "City Name: " + citySelected + "  //  City Id: cityId" + , Toast.LENGTH_LONG).show();
            //Do what you want to do next with the cityId here....

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            Toast.makeText(context, "Not Selected", Toast.LENGTH_LONG).show();
        }
    });
}

Измените свой onItemSelected вот так

 mainBinding.spinnerCity.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String citySelected = parent.getItemAtPosition(position).toString();

            for (CityResponse.City city : cities) {
                if (city.getNama().equalsIgnoreCase(citySelected){
                    String city_id =  city.getCityId(); //THIS IS YOUR CITY ID
                }
            }

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            Toast.makeText(context, "Not Selected", Toast.LENGTH_LONG).show();
        }
    });
Ответ принят как подходящий

Вам нужно создать еще один массив для хранения идентификатора

 locationId.add(i, response.getData());

теперь вам нужно получить идентификатор в спиннере

  spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
                try {

                    selectedId = (String) locationId.get(position);


                } catch (Exception e) {

                }
            }

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

            }
        });

Другие вопросы по теме