BaseAdapter是android应用程序中经常用到的基础数据适配器的基类,它实现了Adapter接口。
主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件进行显示。
在我们需要自定义适配器时(adapter)时我们就需要继承BaseAdapter抽象类,有几个函数是必须要重写的,它们是:
public abstract int getCount()
public abstract Object getItem(int position)
public abstract long getItemId(int position)
public abstract View getView(int position, View convertView, ViewGroup parent)
其中getView()是重点需要重写的方法。
1.getCount()决定了我们将要绘制的资源数,当然这个数目不能大于资源的总数,不过却可以小于资源的总数。例如我们adapter管理的资源总共有10个,而我们通过getCount()返回的只有6个,那么最终GridView绘制出来的将只有6个。
2.getView():通过传入的参数position,加工成我们想要的View并返回,最终供控件使用
3.getItemId()该方法的返回值决定第position处的列表项的ID,某些方法(如onclicklistener的onclick方法)有id这个参数,而这个id参数就是取决于getItemId()这个返回值的。
4.getItem():getItem方法不是在Baseadapter类中被调用的,而是在Adapterview.getItemAtPosition(position) 中被调用的。getItemAtPosition(position) 是在setOnItemClickListener、setOnItemLongClickListen
getItem()和getItemId()有什么用呢?我们知道,GridView将View以方格的方式展示出来之后是要与用户交互的(比如点击某张图片),为了更好的相应用户的动作,我们就要用到这两个函数了。
下面是本人自己写的一个自定义适配器:
//自定义适配器
class MyAdapter extends BaseAdapter {
//得到所有元素数量
@Override
public int getCount() {
return li.size();
}
//根据下标得到单个元素
@Override
public Object getItem(int position) {
return li.get(position);
}
//得到单个元素的ID
@Override
public long getItemId(int position) {
return position;
}
// (重点)对控件进行不同布局的配置以及其中元素的配置
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//设置不同的布局(大分类与小分类的布局不同)
if (group.contains(li.get(position))){
convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.lvg_group_view , null);
}else{
convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.lvg_child_view , null);
}
//设置文字
TextView text = (TextView) convertView.findViewById(R.id.parent_title);
text.setText(li.get(position));
return convertView;
}
}
两个文件中都有同一个TextView,id是一样的(当然也可以不一样,代码就需要放到上面的判断中去执行)
分享使人进步!