Заполните listView пользовательскими данными, создав подкласс BaseAdapter (пример в этом разделе)

1

Не могли бы вы помочь мне понять адаптер с пользовательскими данными:

Я читал учебное пособие, в котором объяснялось, что для заполнения спискаView такой модель, как MyBook (с двумя переменными: автор и заголовок, например), мы должны создать подкласс BaseAdapter и переопределить эти методы:

Вот код:

public LivreAdapter(Context context,List<Livre> biblio) {
        inflater = LayoutInflater.from(context);
        this.biblio = biblio;
    }

    @Override
    public int getCount() {
        return biblio.size();
    }

    @Override
    public Object getItem(int position) {
        return biblio.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    private class ViewHolder {
        TextView tvTitre;
        TextView tvAuteur;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;

        if(convertView == null) {
            holder = new ViewHolder();
            convertView = inflater.inflate(R.layout.itemlivre, null);
            holder.tvTitre = (TextView)convertView.findViewById(R.id.tvTitre);
            holder.tvAuteur = (TextView)convertView.findViewById(R.id.tvAuteur);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.tvTitre.setText(biblio.get(position).getTitre());
        holder.tvAuteur.setText(biblio.get(position).getAuteur());

        return convertView;
    }

}
  1. Создаем ли подкласс BaseAdapter только для отображения пользовательских данных так, как мы хотим (с субтитрами и т.д.)? Поскольку это действительно просто заполнить listView массивом String, здесь нам нужно подклассифицировать BaseAdapter...

  2. Я не могу найти эти методы в документе, поэтому getItem будет вызван до getView? в конце метода мы устанавливаем "держатель" для хранения текста из базы данных, но я не вижу, где мы повторно используем этот "держатель", поскольку единственная возвращаемая переменная - "convertView"?

Я ищу информацию в документе, но не могу найти что-то, что поможет мне точно понять процесс класса.

Теги:
android-listview

1 ответ

5
Лучший ответ

Существуют и другие классы, которые также могут быть подклассифицированы. Простой списокView полезен, но он не может использоваться для отображения пользовательских данных. Чтобы иметь возможность заполнять listView с помощью настраиваемых данных, вам необходимо использовать адаптер, который раздувает каждую строку listView. getItem может использоваться изнутри getView inorder для получения определенной записи из списка. При создании адаптера. Просмотр этих представлений перерабатывается, поэтому могут использоваться ViewHolders

  • 0
    ммх хорошо, а насчет "держателя", это не имеет значения, чтобы быть обновленным в конце метода, верно? сначала он устанавливается в качестве тега convertView, а затем мы обновляем «holder», нам не нужно снова вызывать «setTag», потому что он автоматически это сделает ... это правильно? Кроме того, BaseAdapter (здесь его подкласс) похож for цикл for , он считает «размер» и вызывает getView для итерации элементов? Просто чтобы быть уверенным;) Еще раз спасибо за ваш быстрый ответ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню