Po wylogowaniu się z sekcji sectionList jest 20 pozycji; z jakiegoś powodu wszystkie oprócz ostatniego elementu są wprowadzane do sekcji Tablica. Czy ktoś może zobaczyć, co tu jest nie tak?

AKTUALIZACJA: Wysłałem całą kwestionowaną klasę; jest stosunkowo krótki. Pochodzi z aplikacji na Androida.

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()]);


    }
0
TheLettuceMaster 28 sierpień 2012, 05:38

2 odpowiedzi

Najlepsza odpowiedź
    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);
    }

Dlaczego kopiujesz tablicę dwa razy tutaj? Dlaczego nie użyć Iterator? Właściwie to, czego powinieneś naprawdę użyć, to ArrayList.toArray do konwersji na String[], np.

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

Dodatkowo możesz posortować klucze za pomocą TreeMap zamiast HashMap, po prostu wykonując TreeMap.keySet...

Iterator zestawu zwraca klucze w kolejności rosnącej.

3
obataku 28 sierpień 2012, 06:00

Myślę, że powodem tego jest warunek w pętli for i < sections.length - 1;. Prawdopodobnie logujesz sections[i] tylko w pętli for.

1
Bhesh Gurung 28 sierpień 2012, 05:57