RecycleView 我們?cè)贏ndroid項(xiàng)目中經(jīng)常使用,adapter一般我們是這么寫的:顯示新建一個(gè)Adapter類繼承 RecyclerView.Adapter,然后
再寫一個(gè)ViewHolder類繼承RecyclerView.ViewHolder類
class JcActivityListAdapter(context: Context, list: List<JCActivityBean>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var context = context
var list = list
lateinit var disposable: Disposable
override fun getItemViewType(position: Int): Int {
return if (position == 0) {
ActivityConstant.TYPE_HEADER_VIEW
} else {
ActivityConstant.TYPE_NORMAL_VIEW
}
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
if (viewType == ActivityConstant.TYPE_HEADER_VIEW) {
var headView = LayoutInflater.from(context).inflate(R.layout.group_buy_activity_head_layout, parent, false)
return HeaderHolder(headView)
} else {
var view = LayoutInflater.from(context).inflate(R.layout.jc_activity_list_item_layout, parent, false)
return ListHolder(view)
}
}
override fun getItemCount(): Int {
return list.size
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
...........省略業(yè)務(wù)代碼
}
inner class ListHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var image = itemView.findViewById(R.id.image) as SimpleDraweeView
...........省略業(yè)務(wù)代碼
}
inner class HeaderHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
}
}
這樣的話,我們就會(huì)發(fā)現(xiàn)每次都要新建一個(gè)ViewHolder繼承 RecyclerView.ViewHolder的匿名內(nèi)部類,很是繁瑣,
我們可以寫一個(gè)公共ViewHolder類,把布局文件作為參數(shù)傳進(jìn)去 代碼如下:
public class CustomViewHolder extends RecyclerView.ViewHolder {
private SparseArray<View> views;
private View rootView;
public CustomViewHolder(View itemView) {
super(itemView);
views = new SparseArray<>();
this.rootView = itemView;
}
public static CustomViewHolder createViewHolder(Context context, ViewGroup parent, int resource) {
View rootView = LayoutInflater.from(context).inflate(resource, parent, false);
CustomViewHolder customViewHolder = new CustomViewHolder(rootView);
return customViewHolder;
}
public View getRootView() {
return rootView;
}
public <T extends View> T getView(int resource) {
View view = views.get(resource);
if (view == null) {
view = rootView.findViewById(resource);
views.put(resource, view);
}
return (T) view;
}
}
使用方式如下:
class DcGoodsListAdapter(context: Context,list: MutableList<CommdityBean>): RecyclerView.Adapter<CustomViewHolder>() {
var context = context
var list = list
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): CustomViewHolder {
return CustomViewHolder.createViewHolder(parent?.context,parent, R.layout.dc_goods_item_layout)
}
override fun getItemCount(): Int {
return list.size
}
override fun onBindViewHolder(holder: CustomViewHolder?, position: Int) {
(holder?.getView(R.id.commodity_name)as TextView).text = list[position].commodity_name
//業(yè)務(wù)代碼省略
}
}