Android 之adapter

来源:互联网 发布:娜迦皇家卫兵知乎 编辑:程序博客网 时间:2024/04/30 11:32

Adapter是连接后端数据和前端显示的适配器接口,是数据和UIView)之间一个重要的纽带.

Android中与Adapter有关的所有接口、类的完整层级图。在我们使用过程中可以根据自己的需求实现接口或者继承类进行一定的扩展。比较常用的有 Base AdapterImpleaderAdapterCounteradaptation等。

  • BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
  • ArrayAdapter支持泛型操作,最为简单,只能展示一行字。
  • SimpleAdapter有最好的扩充性,可以自定义出各种效果。
  • SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。
以下是重新封装的ListAdapter:

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();
}

}

1 0
原创粉丝点击