RecycleView 項(xiàng)目中優(yōu)化處理

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ù)代碼省略
    }


}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容