什么是适配器?
简单来说就是对数据和界面的适配。一些不能直接赋值到界面上的数据类型(如List,Map等),就要靠适配器来展示到页面界面
适配器控件工作流程:
集合类数据对象 --> 适配器对象 --> 适配器控件
常用的适配器控件
1.ArrayAdapter
主要用于纯文本数据的显示
2.SimpleAdapter
可用于复杂的数据显示,将集合中不同的数据项填充到不同的View的不同组件中
3.BaseAdapter
它是以上适配器的公共基类,可以实现以上适配器的所有功能,且可以自定义Adapter来定制每个条目的外观功能,具有较高的灵活性
BaseAdapter使用示例
最终效果图:
1.界面布局:
说明:上面是约束布局组件,下面是ListView组件
2.ListView组件中每一个item的布局
3.为Item创建实体类
public class QQMsgBean { private int qq_icon; private String qq_name; private String lastmsg_time; private String lasttitle; private String noetrendmsg_count; public QQMsgBean(int qq_icon, String qq_name, String lastmsg_time, String lasttitle, String noetrendmsg_count) { this.qq_icon = qq_icon; this.qq_name = qq_name; this.lastmsg_time = lastmsg_time; this.lasttitle = lasttitle; this.noetrendmsg_count = noetrendmsg_count; } //get,set方法.... }
4.创建一个适配器类
该类继承BaseAdapter类,负责把数据和界面适配
public class QQMsgAdapter extends BaseAdapter { private List<QQMsgBean> data; //数据 private Context context; //上下文对象,方便getItem方法使用 //构造器方法 public QQMsgAdapter(List<QQMsgBean> data, Context context) { this.data = data; this.context = context; } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } //获取每一行item的显示内容 @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null){ //充分利用缓存机制提高效率 convertView = LayoutInflater.from(context).inflate(R.layout.item_qqmessage,parent,false); } QQMsgBean bean = data.get(position); //通过索引获取对应的数据对象 ImageView img = (ImageView)convertView.findViewById(R.id.img_qqicon);//获取view组件 img.setImageResource(bean.getQq_icon()); //传入值给view组件 TextView name = (TextView)convertView.findViewById(R.id.tv_qqname); name.setText(bean.getQq_name()); TextView lasttitle = (TextView)convertView.findViewById(R.id.tv_lasttitle); lasttitle.setText(bean.getLasttitle()); TextView tv_lastmsgtime = (TextView)convertView.findViewById(R.id.tv_lastmsgtime); tv_lastmsgtime.setText(bean.getLastmsg_time()); TextView tv_notrendmsgcount = (TextView)convertView.findViewById(R.id.tv_notrendmsgcount); tv_notrendmsgcount.setText(bean.getNoetrendmsg_count()); return convertView; } }
5.Avtivity代码
public class QQMessageActivity extends AppCompatActivity { private ListView lvMessage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_qqmessage); lvMessage = (ListView)findViewById(R.id.lvMessage); List<QQMsgBean> data = getData(); //获取数据集合 lvMessage.setAdapter(new QQMsgAdapter(data,this)); //把数据集合塞到适配器里面适配 } public static List<QQMsgBean> getData(){}//获取数据集合的方法 }