什么是適配器?
簡單來說就是對數據和界面的適配。一些不能直接賦值到界面上的數據類型(如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(){}//獲取數據集合的方法 }
