一.Adapter概念:
Adapter是連接后端數(shù)據(jù)和前端顯示的適配接口,是數(shù)據(jù)和UI(View)之間一個重要的紐帶溺欧。在常見的View(ListView, GridView)等地方都需要用到Adapter奇适。相當于ios里面tableView,collection的DataSource.我們在使用過程中可以根據(jù)自己的需求實現(xiàn)接口或者繼承類進行一定的擴展账忘。比較常用的有 Base Adapter韩玩,Impleader,Adapter唱歧,Counteradaptation等。
二.常用Adapter:
BaseAdapter是一個抽象類粒竖,繼承它需要實現(xiàn)較多的方法颅崩,所以也就具有較高的靈活性;
ArrayAdapter支持泛型操作,最為簡單蕊苗,只能展示一行字;
SimpleAdapter有最好的擴充性沿后,可以自定義出各種效果;
SimpleCursorAdapter可以適用于簡單的純文字型ListView,它需要Cursor的字段和UI的id對應起來朽砰。如需要實現(xiàn)更復雜的UI也可以重寫其他方法尖滚。可以認為是SimpleAdapter對數(shù)據(jù)庫的簡單結合锅移,可以方便地把數(shù)據(jù)庫的內容以列表的形式展示出來熔掺。
三.在此對BaseAdapter用法進行詳細介紹。
1.首先創(chuàng)建一個類繼承BaseAdapter
public class ItemBaseAdapter extends BaseAdapter {
// data 要顯示的數(shù)據(jù)源
public List<Item> itemList;
private LayoutInflater inflater;
//init 構造函數(shù)初始化 context為當前的上下文
public ItemBaseAdapter(Context context, List<Item> data) {
this.inflater = LayoutInflater.from(context);
this.itemList = data;
}
// 重寫父類方法
// 返回數(shù)據(jù)源數(shù)量
@Override
public int getCount() {return itemList.size();}
// 返回的是該position對應的item非剃,即獲得相應數(shù)據(jù)集合中特定位置的數(shù)據(jù)項
@Override
public Object getItem(int position) {
return null;
}
// 它返回的是該postion對應item的id, 相當于ios tableView的 indexPath
@Override
public long getItemId(int position) {
return 0;
}
// 返回了每個item項所顯示的view,該view在layout里自定義布局置逻,可重用,相當于tableView自定義的cell
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//創(chuàng)建ViewHolder 實例并賦值
ItemViewHolder holder = null;
if (convertView == null) {
holder = new ItemViewHolder();
convertView = inflater.inflate(R.layout.item_view, null);
holder.title = (TextView)convertView.findViewById(R.id.title);
holder.desc = (TextView)convertView.findViewById(R.id.desc);
holder.imageView = (ImageView)convertView.findViewById(R.id.image);
holder.price = (TextView)convertView.findViewById(R.id.price);
// 設置視圖層次結構
convertView.setTag(holder);
} else {
holder = (ItemViewHolder)convertView.getTag();
}
holder.title.setText(itemList.get(position).getTitle());
holder.desc.setText(itemList.get(position).getDesc());
holder.price.setText(price);
String url = itemList.get(position).getCoverImageUrl();
// MARK: inflater.getContext()獲取當前的上下文
// 用Picasso框架異步加載網(wǎng)絡圖片
Picasso.with(inflater.getContext()).load(url).placeholder(R.drawable.placeholder).error(R.drawable.placeholder).into(holder.imageView);
}
return convertView;
}
}
2.創(chuàng)建ViewHolder類备绽,屬性是所有要顯示在View上的控件券坞。相當于ios里面的在storyboard里拖一個線到view上,把控件與view相關聯(lián)肺素。
public final class ItemViewHolder {
public TextView title;
public TextView desc;
public ImageView imageView;
public TextView price;
}
4.運用BaseAdapter恨锚。
在繼承與Fragment的類里面創(chuàng)建BaseAdapter的實例,并傳入數(shù)據(jù)源倍靡,就可以讓Fragment顯示自定義的布局和數(shù)據(jù).
// 創(chuàng)建ItemBaseAdapter的實例
BaseAdapter adapter = new ItemBaseAdapter(getActivity(),items);
// 設置gridView的adapter
item_grid.setAdapter(adapter);
以上就是BaseAdapter的基本使用猴伶。