0

当我注销 sectionList 时,有 20 个项目;出于某种原因,除了最后一项之外的所有内容都被输入到 Array 部分。有人可以看到这里有什么问题吗?

更新:我发布了有问题的整个班级;它相对较短。它来自一个安卓应用程序。

public class ItemAdapter extends ArrayAdapter<ItemObject> implements
        SectionIndexer {

    private HashMap<String, Integer> alphaIndexer;
    private String[] sections;
    private LayoutInflater inflater;

    public ItemAdapter(Context context, ItemObject[] objects) {
        super(context, R.layout.item_row_layout, objects);

        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        alphaIndexer = new HashMap<String, Integer>();
        int size = objects.length;

        for (int i = 0; i < size; i++) {

            ItemObject it = objects[i];
            String name = it.name;
            String s = name.substring(0, 1);
            s = s.toUpperCase();

            if (!alphaIndexer.containsKey(s)) {
                alphaIndexer.put(s, i);
            }
        }

        Set<String> sectionLetters = alphaIndexer.keySet();
        ArrayList<String> sectionList = new ArrayList<String>(sectionLetters);
        Collections.sort(sectionList);
        sections = new String[sectionList.size()];

        sections = sectionList.toArray(new String[sectionList.size()]);


    }
4

2 回答 2

3
    for (int i = 0; i < sectionList.size(); i++) {
        sections[i] = sectionList.get(i);
    }

    for (int i = 0; i < sections.length - 1; i++) {
        sections[i] = sectionList.get(i);
    }

你为什么在这里复制数组两次?另外,为什么不使用Iterator? 实际上,您真正应该使用的是ArrayList.toArray转换为String[],例如

sections = sectionList.toArray(new String[sectionList.size()]);

此外,您可以使用 aTreeMap而不是 a对密钥进行排序HashMap,只需执行TreeMap.keySet...

集合的迭代器按升序返回键。

于 2012-08-28T01:53:44.023 回答
1

我认为这背后的原因是 for 循环中的条件i < sections.length - 1;。您可能sections[i]只在 for 循环中登录。

于 2012-08-28T01:57:42.057 回答