пользовательский массив адаптер для просмотра списка Android - PullRequest
1 голос
/ 10 марта 2012

Что я по сути пытаюсь сделать, это заполнить свой ListView цветными TextViews. Я решил, что мне нужно создать собственный ArrayAdapter. Адаптер примет массив объектов моего класса ColorElement. Вот код для адаптера

public class ColoredAdapter extends ArrayAdapter<ColorElement> {
    private final Context context;
    private final ArrayList<ColorElement> values;

    public ColoredAdapter(Context context, ArrayList<ColorElement> values) {
        super(context, R.layout.simple_list_item_1);
        this.context = context;
        this.values = values;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        TextView textView = (TextView) view.findViewById(R.id.text1);

        textView.setText( ((ColorElement)values.get(position)).getName());
        textView.setTextColor(((ColorElement)values.get(position)).getClr());
        return view;
    }
}

И это код, в котором я создаю массив объектов и устанавливаю адаптер

 ArrayList<ColorElement> values = new ArrayList<ColorElement>();

        for(int i = 0; i < answerCount; ++i) {
            int num = randNumber.nextInt(colorList.size() - 1);
            values.add( colorList.get(num) );
        }

        mAnswerList.setAdapter(new ColoredAdapter(this, values));

colorList - это другой список упорядоченных объектов. Я пытаюсь рандомизировать это. Я не получаю никаких ошибок, но список просто не отображается, и я понятия не имею, что я делаю неправильно.

1 Ответ

5 голосов
/ 10 марта 2012

У вас не может быть своего собственного экземпляра данных, чтобы ArrayAdapter работал, это фактически то, что заставляет его не работать. В вашем конструкторе вы должны вызвать super со своим списком, после этого все будет работать. Проблема заключается в том, что ArrayAdapter использует свой внутренний массив для сообщения о количестве элементов, которое не соответствует вашим values.length.

public ColoredAdapter(Context context, ArrayList<ColorElement> values) {
    super(context, R.layout.simple_list_item_1, values);
}

В вашем представлении get вместо values.get, позвоните getItem(position).

...