Как получить идентификатор выбранного элемента из JSON в Spinner? - PullRequest
0 голосов
/ 15 июня 2019

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

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

пример: 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();
            }
        });
    }

Ответы [ 3 ]

1 голос
/ 15 июня 2019

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

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

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

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

            }
        });
0 голосов
/ 15 июня 2019

Измените 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();
        }
    });
0 голосов
/ 15 июня 2019

Вам необходимо обновить 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();
        }
    });
}
...