Я получаю с сервера список, содержащий два списка часовых поясов США и Канады. Идентификатор списка Канады равен 1, а США — 2. Эти списки содержат идентификатор строки и некоторые другие строки. Мне нужно, чтобы этот идентификатор строки был указан в счетчике, поэтому я создаю новый список, содержащий только те строки, которые мне нужны.
Я помещаю идентификаторы стран в оператор switch
, и он должен поместить список в spinner
, и он отлично работает. Но он показывает только первые два элемента из списка.
for (int i = 0; i < list.size(); i++)
listCountryId.add(list.get(0).getTimeZoneModelList().get(i).getId());
так что в основном идея состоит в том, что я перебираю свой список с сервера, и поскольку у меня всегда есть только два списка в этом списке, в этом случае я перебираю первый список. Вот почему я жестко запрограммировал. Когда я отлаживаю, я вижу, что мой getTimeZoneModelList()
содержит полный список, но когда я отлаживаю listCountryId()
, он содержит только первые два элемента.
это мой полный код:
private void setUpSpinner() {
switch (model.getCountry().getCoutryId()) {
case 1:
for (int i = 0; i < list.size(); i++)
listCountryId.add(list.get(0).getTimeZoneModelList().get(i).getId());
ArrayAdapter<String> adapterMembers = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, listCountryId);
adapterMembers.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
binding.timezoneSpinner.setAdapter(adapterMembers);
Log.i(TAG, "lista idjeva: " + Arrays.toString(listCountryId.toArray()));
break;
case 2:
for (int i = 0; i < list.size(); i++) {
listCountryId.add(list.get(1).getTimeZoneModelList().get(i).getId());
}
ArrayAdapter<String> adapter = new ArrayAdapter<>(
context, android.R.layout.simple_spinner_item, listCountryId);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
binding.timezoneSpinner.setAdapter(adapter);
Log.i(TAG, "lista idjeva: " + Arrays.toString(listCountryId.toArray()));
break;
}
}
Вы зацикливаетесь на list
, который содержит только 2 (США и Канада), но на самом деле вам нужен базовый список кодов.
Итак, In case 1
: вам нужно изменить список в цикле for с
for (int i = 0; i < list.size(); i++)
К:
for (int i = 0; i < list.get(0).getTimeZoneModelList().size(); i++)
И сделайте то же самое для case 2
Это происходит потому, что ваш цикл действительно выполняется два раза. Должен быть
for (int i = 0; i < list.get(0).getTimeZoneModelList().size(); i++)
listCountryId.add(list.get(0).getTimeZoneModelList().get(i).getId());
Даже лучше:
List<TimeZoneModel> timeZoneModelList = listCountryId.add(list.get(0).getTimeZoneModelList();
for (int i = 0; i < timeZoneModelList.size(); i++)
listCountryId.add(timeZoneModelList.get(i).getId());
Второй способ более эффективен.