Android 之adapter
来源:互联网 发布:娜迦皇家卫兵知乎 编辑:程序博客网 时间:2024/04/30 11:32
Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.
在Android中与Adapter有关的所有接口、类的完整层级图。在我们使用过程中可以根据自己的需求实现接口或者继承类进行一定的扩展。比较常用的有 Base Adapter,Impleader,Adapter,Counteradaptation等。
- BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
- ArrayAdapter支持泛型操作,最为简单,只能展示一行字。
- SimpleAdapter有最好的扩充性,可以自定义出各种效果。
- SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AbsListView.RecyclerListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import cn.ddhl.cust.widget.XListView.OnXScrollListener;
/**
* ,可以监听ListView非显示项的回收情况,以便对当前执行的任务进行中止和回收。 添加{@link #DEFAULT_LISTENER}
* 对list滑动的状态进行监听,当滑动停止时,再进行对图片的加载,这种方式避免滑动时加载项过多造成内存溢出。
*
* @param <T>
*/
public abstract class ListAdapter<T> extends BaseAdapter implements RecyclerListener {
private static final String TAG = "ListAdapter";
protected List<T> mList;
protected Context mContext;
protected ListView mListView;
protected final ScrollListenersAdapter defaultListnerAdapter = new ScrollListenersAdapter();
public ListAdapter(Context context) {
this.mContext = context;
}
public ListAdapter(Context context, List<T> list) {
this.mContext = context;
this.mList = list;
}
@Override
public int getCount() {
if (mList != null)
return mList.size();
else
return 0;
}
@Override
public Object getItem(int position) {
return mList == null ? null : mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
abstract public View getView(int position, View convertView, ViewGroup parent);
public void setList(List<T> list) {
this.mList = new ArrayList<T>(list);
notifyDataSetChanged();
}
public List<T> getList() {
return mList;
}
public void setList(T[] list) {
ArrayList<T> arrayList = new ArrayList<T>(list.length);
for (T t : list) {
arrayList.add(t);
}
setList(arrayList);
}
public void addAll(List<T> list) {
if (this.mList == null) {
this.mList = new ArrayList<T>();
}
this.mList.addAll(list);
notifyDataSetChanged();
}
public ListView getListView() {
return mListView;
}
public void setListView(ListView listView) {
mListView = listView;
}
public Object getItemAtPosition(int position) {
return mList.get(position);
}
@Override
public void onMovedToScrapHeap(View view) {
// 可继承次方法,在List的某一项被回收的时候使用。
}
public ScrollListenersAdapter getListnersAdapter() {
return defaultListnerAdapter;
}
/**
* 适配器模式,使可设置监听器数量由1个转为多个。
*
*/
public class ScrollListenersAdapter implements OnXScrollListener {
protected final ArrayList<OnScrollListener> mListeners = new ArrayList<OnScrollListener>();
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
for (OnScrollListener l : mListeners) {
l.onScrollStateChanged(view, scrollState);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
for (OnScrollListener l : mListeners) {
l.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);
}
}
public void addOnScrollListener(OnScrollListener l) {
mListeners.add(l);
}
@Override
public void onXScrolling(View view) {
// TODO Auto-generated method stub
}
}
public void clear() {
mList.clear();
notifyDataSetChanged();
}
}
- Android之Adapter系列之Adapter接口
- Android 之Adapter
- android之Adapter
- Android之Adapter
- Android之adapter详解
- android之Adapter
- Android基础之Adapter
- Android之自定义Adapter
- Android之Adapter用法
- Android之Adapter(适配器)
- Android之Adapter用法
- Android之Adapter优化
- Android之Adapter优化
- Android之Adapter优化
- android之adapter
- Android之Adapter
- Android之各种Adapter
- Android之Adapter总结
- 小希益公益APP走进法大校园,推进校园公益活动
- HDU-5862-Counting Intersections(树状数组+离散化+扫描线)
- AbstractQueuedSynchronizer的介绍和原理分析
- 经典算法,复古算法
- click through rate prediction
- Android 之adapter
- php post提交json如何获取
- 图解MySql命令行创建存储过程
- Kali Linux的安装
- ubuntu下安装vftp 安装vsftpd提示530 Login incorrect
- 使用requests模拟登陆github
- Opencv2.4.9源码分析——Expectation Maximization
- 车牌摇号 程序设计题
- git 远程版本库安装,github提供服务原理,git自动更新发送邮件