Как выбрать предмет на блесне? - PullRequest
0 голосов
/ 19 мая 2019

я использую Retrofit, пункт показан, но я не могу выбрать. после нажатия на элемент, тост и прядильщик ничего не показывают (я не могу выбрать предмет на прядильщике) .......

private List<String> spinnerItem;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);

        spinnerItem = new ArrayList<>();
        setSpinner();
    }

public void displayCities(List<CityResponse.City> cities) {
        mainBinding.helloText.setText(cities.get(508).getNama());
        for (CityResponse.City city : cities) {
            Log.d(TAG, city.getNama());
            spinnerItem.add(city.getNama());
        }
    }

private void setSpinner(){
        ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_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(parent.getContext(), "City : " + citySelected, Toast.LENGTH_LONG).show();
            }

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

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Текущее решение:

Вы устанавливаете адаптер в setSpinner() со списком с именем spinnerItem, который на данный момент пуст. Затем в displayCities() вы заполняете список значениями, но забываете уведомлять адаптер о новых добавленных значениях.

public void displayCities(List<CityResponse.City> cities) {
        for (CityResponse.City city : cities) {
            spinnerItem.add(city.getNama());
        }
        // 2. notify adapter that you have inserted new cities to the list
}

private void setSpinner(){
        // 1. set the adapter with spinnerItem which is empty here
        ArrayAdapter<String> adapter = new ArrayAdapter<>(..., ..., spinnerItem);
        mainBinding.spinnerCity.setAdapter(adapter);
        ...
}

Если adapter является локальной переменной для setSpinner(), то displayCities() не имеет доступа к adapter. Создайте adapter как глобальный и затем вы можете позвонить adapter.notiftDataSetChanged() в пункте 2 комментария

0 голосов
/ 19 мая 2019

Ваш метод setSpinner ():

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

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

CityActivity.java:

Spinner spinnerCity = findViewById(R.id.spinner);
String[] spinnerItem = {"A", "B", "C", "D", "E"};
setSpinner(CityActivity.this, spinnerCity, Arrays.<Object>asList(spinnerItem));
...