我的列表只显示微调器中的前两项

My list only showing first two items in spinner

提问人:gojic 提问时间:12/12/2020 最后编辑:Zaingojic 更新时间:12/12/2020 访问量:84

问:

我从服务器得到一个包含两个时区列表的列表,即美国和加拿大。加拿大列表的 ID 是 1,我们是 2.该列表包含字符串 id 和其他一些字符串。我需要在微调器中列出该字符串 ID,因此这就是我制作仅包含我需要的字符串的新列表的原因。 我在声明中输入了国家/地区的 ID,它应该将列表放入并且工作正常。但它只显示列表中的前两项。switchspinner

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;
        }
    }
Java Android 列表 ArrayList

评论


答:

2赞 Zain 12/12/2020 #1

您正在循环仅包含 2 (US & Canda),但实际上您需要底层代码列表list

所以,在:你需要将 for 循环中的列表从case 1

for (int i = 0; i < list.size(); i++)

自:

for (int i = 0; i < list.get(0).getTimeZoneModelList().size(); i++)

并做同样的事情case 2

2赞 Arvind Kumar Avinash 12/12/2020 #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());

第二种方式效率更高。