您能帮我理解带有自定义数据的适配器:
我正在阅读一个教程,解释用一个像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;
}
}
我们是否只创建BaseAdapter的子类以按照我们想要的方式显示自定义数据(带字幕等)?因为用String数组填充listView非常简单,所以我们需要将BaseAdapter子类化...
我在doc中找不到那些方法,所以getItem会在getView之前调用吗?在方法的最后,我们设置“holder”来保存数据库中的文本,但是我没有看到我们重新使用这个“holder”的位置,因为返回的唯一变量是“convertView”?
我正在寻找文档中的信息,但找不到能帮助我理解课程过程的东西。
答案 0 :(得分:5)
还有其他类也可以是子类。简单的listView很有用但它不能用于显示自定义数据。为了能够用自定义数据填充listView,你需要使用一个扩展listView的每一行的适配器。 getItem可以在getView中使用,以便从列表中获取特定条目。当适配器创建View时,这些视图被回收,因此可以使用ViewHolders