Andriod中的适配器有Adapter、SimpleAdapter和BaseAdapter.而我们今天重点学习的是最后一种BaseAdapter,也是Android最常用的一种了....
第一步:把布局画好,直接写一个ListView列表
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView"
></ListView>
第二步:来新建一个Item布局
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:id="@+id/img"
android:background="@mipmap/ic_launcher"
/>
<TextView
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_toRightOf="@+id/img"
android:id="@+id/tv01"
android:text="00"
/>
<TextClock
android:layout_width="match_parent"
android:layout_height="30dp"
android:id="@+id/tv02"
android:layout_toRightOf="@+id/img"
android:layout_below="@+id/tv01"
/>
第三步:新建一个ItemBean类
public class ItemBean {
//都为公有,可以访问的
public int ItemImageId;
public String ItemTitle;
public String ItemCount;
//创建一个构造方法
ItemBean(int itemImageId, String itemTitle, String itemCount){
ItemImageId=itemImageId;
ItemTitle=itemTitle;
ItemCount=itemCount;
}
}
第四步:新建一个Java类,类名为MyBaseAdapter,继承自BaseAdapter
public class MyBaseAdapter extends BaseAdapter {//继承自BaseAdapter进行导包
//数据源与数据适配器进行关联
private List<ItemBean> mList;//一个集合,写在TtemBean中
private LayoutInflater mInflater;
//创建一个构造方法
MyBaseAdapter(Context context, List<ItemBean> list){
mList=list;
mInflater=LayoutInflater.from(context);
}
//导过包出来的四个方法。
@Override
public int getCount() {
return mList.size();//返回ListVIew所需要显示的数据量
}
@Override
public Object getItem(int i) {
return mList.get(i);//集合的位置
}
@Override
public long getItemId(int i) {
return i;//id
}
//最最最重要的方法,这才是主要写逻辑的方法
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder;//定义一个类
if(view==null){
viewHolder=new ViewHolder();//对ViewHolder类进行实例化
view=mInflater.inflate(R.layout.item,null);//加载item布局
/*
*第一个参数是要加载的布局
*第二个参数一般默认设置为null
*
*/
//寻找ViewHolder中控件的Id,
viewHolder.ImageId= (ImageView) view.findViewById(R.id.img);
viewHolder.Title= (TextView) view.findViewById(R.id.tv01);
viewHolder.Count= (TextView) view.findViewById(R.id.tv02);
//通过setTag将view与ViewHolder绑定
view.setTag(viewHolder);
}else{
//通过ViewHolder对象找到对应的空文件
viewHolder= (ViewHolder) view.getTag();
}
ItemBean bean=mList.get(i);
//对ViewHolder类中的控件进行赋值
viewHolder.ImageId.setImageResource(bean.ItemImageId);
viewHolder.Title.setText(bean.ItemTitle);
viewHolder.Count.setText(bean.ItemCount);
return view;//返回一个View
}
/*
*创建一个内部类ViewHolder
* 为了避免findViewById的重复的操作
*/
class ViewHolder{
private ImageView ImageId;
private TextView Title;
private TextView Count;
}
}
第五步;最后来到我们期待已久的主JAVA类
##1.初始化控件
private ListView listView;
private ItemBean itemBean;//对ItemBean类进行初始化
##2.在onCreate方法中进行编写
List<ItemBean> itemBeen=new ArrayList<>();
for(int i=0;i<20;i++){
itemBeen.add( new ItemBean(R.mipmap.ic_launcher,"我是标题"+i,"我是内容"+i));
}
listView= (ListView) findViewById(R.id.listView);//寻找Id
/*
*创建一个适配器MyBaseAdapter
*第一个参数:上下文
*第二个参数:相当于是一个数据源
*/
listView.setAdapter(new MyBaseAdapter(this,itemBeen));//将listView与适配器进行绑
}
最后我们来看下运行结果