package cm.android.sdk.widget.adapter; import android.content.Context; import android.util.SparseArray; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import java.util.ArrayList; /** * 改用RecyclerView */ @Deprecated public abstract class MyBaseAdapter<T> extends AbstractAdapter<T> implements AbsListView.RecyclerListener { protected final ArrayList<View> mActive = new ArrayList<View>(); public boolean isRepeat = false; public MyBaseAdapter(Context context) { super(context); } /** * 设置是否可以循环滚动 * * @param isRepeat true:可以循环滚动,此时getCount()返回Integer.MAX_VALUE */ public void setRepeat(boolean isRepeat) { this.isRepeat = isRepeat; } @Override public final int getCount() { if (isRepeat) { return Integer.MAX_VALUE; } return super.getCount(); } @Override public final View getView(int position, View convertView, ViewGroup parent) { T data = getItem(position); ViewHolder viewHolder; if (null == convertView) { convertView = createRootView(position, parent); viewHolder = initView(convertView); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } updateView(viewHolder, position, data); mActive.remove(convertView); mActive.add(convertView); return convertView; } @Override public void onMovedToScrapHeap(View view) { mActive.remove(view); } protected ViewHolder initView(View convertView) { return new DefaultViewHolder(convertView); } /** * 根据ViewHolder刷新数据 */ protected abstract void updateView(ViewHolder viewHolder, int position, T data); /** * 创建RootView */ protected abstract View createRootView(int position, ViewGroup parent); /** * 根据layoutResId创建View */ protected View createRootView(int layoutResId) { return mInflater.inflate(layoutResId, null); } /** * AdapterViewHolder */ public static abstract class ViewHolder { } public static class DefaultViewHolder extends ViewHolder { private SparseArray<View> views = new SparseArray<View>(); private View convertView; public DefaultViewHolder(View convertView) { this.convertView = convertView; } @SuppressWarnings("unchecked") public <T extends View> T getView(int resId) { View v = views.get(resId); if (null == v) { v = convertView.findViewById(resId); views.put(resId, v); } return (T) v; } } }