【问题标题】:Fill a listView with custom data, subclassing BaseAdapter (example in this topic)使用自定义数据填充 listView,继承 BaseAdapter(本主题中的示例)
【发布时间】:2015-12-13 20:28:12
【问题描述】:

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

我正在阅读一个教程,该教程解释了要使用 MyBook 之类的模型(具有 2 个变量:例如作者和标题)填充 listView,我们应该创建 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. 我在文档中找不到这些方法,所以 getItem 会在 getView 之前被调用吗?在方法结束时,我们设置“holder”来保存数据库中的文本,但我看不出我们在哪里重复使用这个“holder”,因为返回的唯一变量是“convertView”?

我正在寻找文档中的信息,但找不到可以帮助我准确理解课程过程的信息。

【问题讨论】:

    标签: java android android-listview


    【解决方案1】:

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

    【讨论】:

    • mmh ok,关于“holder”,方法最后更新也没关系吧?它首先设置为convertView的标签,然后我们更新“holder”,我们不需要再次调用“setTag”,因为它会自动执行......是否正确?另外,BaseAdapter(这里是它的子类)就像一个for 循环,它计算“大小”并调用getView 来迭代元素?只是为了确定 ;) 再次感谢您的快速回答
    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 2015-06-03
    • 2017-06-18
    • 2013-11-23
    • 1970-01-01
    相关资源
    最近更新 更多