package org.aisen.android.ui.fragment.adapter; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import org.aisen.android.R; import org.aisen.android.ui.fragment.APagingFragment; import org.aisen.android.ui.fragment.itemview.IITemView; import org.aisen.android.ui.fragment.itemview.IItemViewCreator; import java.io.Serializable; import java.util.ArrayList; /** * 1、支持能够使用BaseAdapter的控件 * 2、支持ViewType,默认是Normal Type * * @param <T> */ public class BasicListAdapter<T extends Serializable> extends BaseAdapter implements IPagingAdapter { private APagingFragment holderFragment; private IItemViewCreator<T> itemViewCreator; private ArrayList<T> datas; public BasicListAdapter(APagingFragment holderFragment, ArrayList<T> datas) { if (datas == null) datas = new ArrayList<T>(); this.holderFragment = holderFragment; this.itemViewCreator = holderFragment.configItemViewCreator(); this.datas = datas; } @Override public int getItemViewType(int position) { T t = getDatas().get(position); if (t instanceof ItemTypeData) { return ((ItemTypeData) t).itemType(); } return IPagingAdapter.TYPE_NORMAL; } @Override public View getView(int position, View convertView, ViewGroup parent) { IITemView<T> itemView; if (convertView == null) { int itemType = getItemViewType(position); convertView = itemViewCreator.newContentView(holderFragment.getActivity().getLayoutInflater(), parent, itemType); itemView = itemViewCreator.newItemView(convertView, itemType); itemView.onBindView(convertView); convertView.setTag(R.id.itemview, itemView); } else { itemView = (IITemView<T>) convertView.getTag(R.id.itemview); } itemView.reset(datas.size(), position); itemView.onBindData(convertView, datas.get(position), position); return convertView; } @Override public ArrayList<T> getDatas() { return datas; } @Override public int getCount() { return datas.size(); } @Override public Object getItem(int position) { return datas.get(position); } @Override public long getItemId(int position) { return position; } }