使用自定义数据填充listView,继承BaseAdapter(本主题中的示例)

时间:2011-12-10 18:45:00

标签: java android android-listview

您能帮我理解带有自定义数据的适配器:

我正在阅读一个教程,解释用一个像MyBook这样的模型填充listView(例如2个变量:作者和标题),我们应该创建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的子类以按照我们想要的方式显示自定义数据(带字幕等)?因为用String数组填充listView非常简单,所以我们需要将BaseAdapter子类化...

  2. 我在doc中找不到那些方法,所以getItem会在getView之前调用吗?在方法的最后,我们设置“holder”来保存数据库中的文本,但是我没有看到我们重新使用这个“holder”的位置,因为返回的唯一变量是“convertView”?

  3. 我正在寻找文档中的信息,但找不到能帮助我理解课程过程的东西。

1 个答案:

答案 0 :(得分:5)

还有其他类也可以是子类。简单的listView很有用但它不能用于显示自定义数据。为了能够用自定义数据填充listView,你需要使用一个扩展listView的每一行的适配器。 getItem可以在getView中使用,以便从列表中获取特定条目。当适配器创建View时,这些视图被回收,因此可以使用ViewHolders