Заполнить ListView вручную - PullRequest
4 голосов
/ 18 июня 2011

Есть ли способ вручную заполнить ListView, который имеет более одного столбца, используя несколько массивов? Мне нужно создать раздел макета, и я хочу использовать ListView, но мне нужно заполнить несколько элементов View данными. Поскольку он не исходит из базы данных, я не хочу использовать курсор, я просто хочу использовать несколько параллельных массивов. Возможно ли это?

Ответы [ 3 ]

1 голос
/ 18 июня 2011

В зависимости от того, правильно ли я интерпретировал вашу проблему, это можно сделать с помощью адаптера:

Вы можете расширить BaseAdaptor, переопределив getView (), и заставить его возвращать некоторую ViewGroup, содержащую виджеты, представляющие данные из разных списков.

Создание подклассов выбранной ViewGroup для создания составного представления, которое легче перерабатывать:

public class DoubleText extends LinearLayout {
    TextView t1, t2;
    public DoubleText(Context c) {
        super(c);
        t1 = new TextView(c);
        t2 = new TextView(c);
        this.addView(t1, 0);
        this.addView(t2, 1);
    }
    public void setText(String s1, String s2) {
        t1.setText(s1);
        t2.setText(s2);
    }
}

Создание подкласса BaseAdapter, однако отображается не все необходимое, есть еще но это должно быть легче понять, как это , где большие различия по сравнению с другими примерами использования адаптеров:

public class DoubleAdaptor extends BaseAdaptor {
    List<String> lista, listb; // <- these are your paralell arrays, they and the
    Context c;                 // context need to be initialized by some method
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        DoubleText recycled = (DoubleText) convertView;
        if (recycled == null) {
            recycled = new Double(context);
        recycled.setText(lista.get(position), listb.get(position));
        return recycled;
    }
}

Кроме того, вам не обязательно иметь одинаковый тип представления для всех строк, то есть переопределять getViewTypeCount (), чтобы дать Android верхний предел количества различных представлений типы для использования и getItemViewType (int position), чтобы сообщить Android, какой тип представления переработать для этой конкретной строки.

Редактировать: Я бы порекомендовал проверить документы разработчика Android на Adapter (интерфейс) и BaseAdapter (абстрактный класс) и ListAdapter (интерфейс), также я забыл вам сказать, что ListView имеет setAdapter (), который может быть интерес.

0 голосов
/ 21 июня 2011

Вы пытались использовать это в качестве основного списка адаптера? -> https://github.com/commonsguy/cwac-thumbnail

CommonsGuy имеет хорошие примеры этого и легко настраивается для создания ListView с динамическими элементами.

0 голосов
/ 18 июня 2011

Это можно сделать;вопрос в том, как ;-) Если вы действительно хотите использовать несколько параллельных массивов, то у вас может не быть другого выбора, кроме как создать подкласс BaseAdapter .Если вы используете (или можете использовать) массив объектов, вы можете сделать несколько более простой подкласс от ArrayAdapter .В последнем случае я думаю, что единственный метод, который вам нужно переопределить, это getView .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...