鴻蒙開(kāi)發(fā)之BaseAdapter封裝

哪個(gè)小可愛(ài)在偷偷的看我~~


偷瞄.gif

背景

android的Listview,在鴻蒙中對(duì)應(yīng)的是ListContainer,Android的adapter在鴻蒙中對(duì)應(yīng)的是RecycleItemProvider,手機(jī)開(kāi)發(fā)必然離不來(lái)列表數(shù)據(jù),為了簡(jiǎn)潔代碼高效開(kāi)發(fā),封裝RecycleItemProvider便提上了日程,目前筆者正在實(shí)戰(zhàn)開(kāi)發(fā)項(xiàng)目,所踩過(guò)的坑與經(jīng)驗(yàn)與大家分享一下,幫助大家更好的入坑鴻蒙,希望早日鴻蒙生態(tài)圈形成。



使用方法
一、設(shè)置圖片 holder.setBackgroundRes(ResourceTable.Id_Component, ResourceTable.Media_icon);
二、控件顯示隱藏 holder.setVisible(ResourceTable.Id_Component, false);
三、控件顯示隱藏 holder.setInvisible(ResourceTable.Id_Component, true);
四、設(shè)置顯示文字 holder.setText(ResourceTable.Id_Component, item.getTitle());
五、設(shè)置監(jiān)聽(tīng) holder.setClickedListener(ResourceTable.Id_Component, new Component.ClickedListener() {);
六、后續(xù)繼續(xù)新增方法
封裝后如何使用
OftenSeeAdapter   mOftenSeeAdapter = new OftenSeeAdapter(mContext, mOftenSeeBean, ResourceTable.Layout_item_often_see);
mListContainerOftenSee.setItemProvider(mOftenSeeAdapter);
Provider寫(xiě)法
public class OftenSeeAdapter extends RecycleItemProviderAdapter<String> {
    public OftenSeeAdapter(Context context, List<String> datas, int layoutId) {
        super(context, datas, layoutId);
    }

    @Override
    public void convert(ViewHolder holder, String s) {

    }
}

相比原代碼閱讀性立馬提升了很多,布局復(fù)用也已處理,目前筆者只把常用的屬性添加到了ViewHolder中,其他需要的自行添加,以后筆者會(huì)繼續(xù)完善

代碼如下,

RecycleItemProviderAdapter如下

/**
*qq群 : 1084365075
 * author : liupeng
 * date   : 2021/1/6
 * desc   : adapter基類(lèi)封裝
 */
public abstract class RecycleItemProviderAdapter<T> extends BaseItemProvider {
    protected Context mContext;
    protected List<T> mDatas;
    protected LayoutScatter mInflater;
    public int layoutId;
    private int displayCount;

    public RecycleItemProviderAdapter(Context context, List<T> datas) {
        this.mContext = context;
        this.mDatas = datas;
        mInflater = LayoutScatter.getInstance(mContext);
    }

    public RecycleItemProviderAdapter(Context context, List<T> datas, int layoutId) {
        this.mContext = context;
        this.mDatas = datas;
        this.layoutId = layoutId;
        mInflater = LayoutScatter.getInstance(mContext);

    }


    @Override
    public int getCount() {
        if (displayCount != 0) {
            return this.displayCount;
        }
        return mDatas.size();
    }

    public void setDisplayCount(int displayCount) {
        this.displayCount = displayCount;
    }

    @Override
    public T getItem(int position) {
        return mDatas.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public Component getComponent(int position, Component convertView, ComponentContainer parent) {

        ViewHolder holder = ViewHolder.get(mContext, convertView, parent,
                layoutId, position);
        convert(holder, getItem(position));
        return holder.getConvertView();
    }

    public List<T> getDatas() {
        return mDatas;
    }

    public void setDatas(List<T> datas) {
        mDatas = datas;
    }

    public abstract void convert(ViewHolder holder, T t);

}

ViewHolder 類(lèi)

/**
 * qq群 : 1084365075
 * author : liupeng
 * date   : 2021/1/6
 * desc   : 適配adapter的viewHolder
 */
public class ViewHolder {
    private HashMap<Integer, Component> mViews;
    private int mPosition;
    private Component mConvertView;
    private Context mContext;
    private int mLayoutId;

    public ViewHolder(Context context, ComponentContainer parent, int layoutId, int position) {
        mContext = context;
        mLayoutId = layoutId;
        this.mPosition = position;
        this.mViews = new HashMap<>();
        mConvertView = LayoutScatter.getInstance(mContext).parse(layoutId, null, false);

        mConvertView.setTag(this);
    }

    public static ViewHolder get(Context context, Component convertView,
                                 ComponentContainer parent, int layoutId, int position) {
        if (convertView == null) {
            return new ViewHolder(context, parent, layoutId, position);
        } else {
            ViewHolder holder = (ViewHolder) convertView.getTag();
            holder.mPosition = position;
            return holder;
        }
    }

    public int getPosition() {
        return mPosition;
    }

    public int getLayoutId() {
        return mLayoutId;
    }

    /**
     * 通過(guò)viewId獲取控件
     *
     * @param viewId
     * @return
     */
    public <T extends Component> T getView(int viewId) {
        Component view = mViews.get(viewId);
        if (view == null) {
            view = mConvertView.findComponentById(viewId);
            mViews.put(viewId, view);
        }
        return (T) view;
    }


    public Component getConvertView() {
        return mConvertView;
    }

    /**
     * 設(shè)置TextView的文本
     *
     * @param viewId
     * @param text
     * @return
     */
    public ViewHolder setText(int viewId, String text) {
        Text tv = getView(viewId);
        tv.setText(text);
        return this;
    }

    public ViewHolder setTextColor(int viewId, int colorid) {
        Text tv = getView(viewId);
        tv.setTextColor(ResUtil.getNewColor(mContext,colorid));
        return this;
    }

    public ViewHolder setTextSize(int viewId, int size) {
        Text tv = getView(viewId);
        tv.setTextSize(size, Text.TextSizeType.FP);
        return this;
    }

    /**
     * @param url
     * @return
     */
    public ViewHolder setImage(int viewId, String url) {

        Image image = getView(viewId);
        GlideUtils.getInstance().displayImage(mContext, url, image);
        return this;
    }

    /**
     * 設(shè)置背景
     *
     * @param viewId
     * @param resId
     * @return
     */
    public ViewHolder setBackgroundRes(int viewId, int resId) {
        Component component = getView(viewId);
        component.setBackground(ResUtil.getPixelMapDrawable(component.getContext(), resId));
        return this;
    }
    /**
     * 設(shè)置image圖片
     *
     * @param viewId
     * @param resId
     * @return
     */
    public ViewHolder setImageRes(int viewId, int resId) {
        Image image = getView(viewId);
        image.setImageElement(ResUtil.getPixelMapDrawable(image.getContext(), resId));
        return this;
    }

    /**
     * 設(shè)置顯示隱藏
     *
     * @param viewId
     * @param visible
     * @return
     */
    public ViewHolder setVisible(int viewId, boolean visible) {
        Component view = getView(viewId);
        view.setVisibility(visible ? Component.VISIBLE : Component.HIDE);
        return this;
    }

    /**
     * 設(shè)置顯示隱藏
     *
     * @param viewId
     * @param invisible
     * @return
     */
    public ViewHolder setInvisible(int viewId, boolean invisible) {
        Component view = getView(viewId);
        view.setVisibility(invisible ? Component.VISIBLE : Component.INVISIBLE);
        return this;
    }

    /**
     * 設(shè)置圓角
     *
     * @param viewId
     * @param radius
     * @return
     */
    public ViewHolder setCornerRadius(int viewId, int radius) {
        Image view = getView(viewId);
        view.setCornerRadius(DisplayUtils.vp2px(mContext, radius));
        return this;
    }

    /**
     * 設(shè)置圓角
     *
     * @param viewId
     * @param left
     * @param top
     * @param right
     * @param bottom
     * @return
     */
    public ViewHolder setCornerRadii(int viewId, int left, int top, int right, int bottom) {
        float[] floats = {
                DisplayUtils.vp2px(mContext, left),
                DisplayUtils.vp2px(mContext, left),
                DisplayUtils.vp2px(mContext, top),
                DisplayUtils.vp2px(mContext, top),

                DisplayUtils.vp2px(mContext, right),
                DisplayUtils.vp2px(mContext, right),
                DisplayUtils.vp2px(mContext, bottom),
                DisplayUtils.vp2px(mContext, bottom),
        };
        Image view = getView(viewId);
        view.setCornerRadii(floats);
        return this;
    }

    /**
     * 關(guān)于事件
     */
    public ViewHolder setClickedListener(int viewId, Component.ClickedListener listener) {
        Component view = getView(viewId);
        view.setClickedListener(listener);
        return this;
    }

    public ViewHolder setTouchEventListener(int viewId, Component.TouchEventListener listener) {
        Component view = getView(viewId);
        view.setTouchEventListener(listener);
        return this;
    }

    public ViewHolder setLongClickedListener(int viewId, Component.LongClickedListener listener) {
        Component view = getView(viewId);
        view.setLongClickedListener(listener);
        return this;
    }

    public ViewHolder setDoubleClickedListener(int viewId, Component.DoubleClickedListener listener) {
        Component view = getView(viewId);
        view.setDoubleClickedListener(listener);
        return this;
    }

}
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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