Android自定义View实现简单列表

2020-03-22  本文已影响0人  itfitness

目录

前言

某些项目中需要实现简单的自适应高度列表,这时使用RecyclerView或者ListView就需要处理列表的自适应高度,另外外层嵌套ScrollView还会有滑动问题,因此结合需求就实现了一个简单的自适应高度的列表。

效果展示

实现原理

代码展示

public class SimpleListView extends LinearLayout {
    private OnItemClickListener onItemClickListener;
    private Context mContext;
    private int itemLayout;
    private CovertViewListener covertViewListener;

    public CovertViewListener getCovertViewListener() {
        return covertViewListener;
    }

    public void setCovertViewListener(CovertViewListener covertViewListener) {
        this.covertViewListener = covertViewListener;
    }

    public OnItemClickListener getOnItemClickListener() {
        return onItemClickListener;
    }

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    public SimpleListView(Context context) {
        this(context,null);
    }

    public SimpleListView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }

    public SimpleListView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContext = context;
        setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        setOrientation(VERTICAL);
    }

    /**
     * 设置数据
     * @param layoutRes
     * @param items
     * @param covertViewListener
     */
    public void setDatas(@LayoutRes int layoutRes , @NonNull final List<?> items, CovertViewListener covertViewListener){
        itemLayout = layoutRes;
        this.covertViewListener = covertViewListener;
        removeAllViews();
        for(int i = 0 ; i < items.size() ; i++){
            View itemView = View.inflate(mContext, layoutRes, null);
            if(covertViewListener!=null){
                covertViewListener.covert(itemView,items.get(i));
            }
            final int finalI = i;
            itemView.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    if(onItemClickListener!=null){
                        onItemClickListener.onItemClick(finalI,items.get(finalI));
                    }
                }
            });
            addView(itemView);
        }
    }

    /**
     * 更新数据
     * @param items
     */
    public void updateDatas(@NonNull final List<?> items){
        removeAllViews();
        for(int i = 0 ; i < items.size() ; i++){
            View itemView = View.inflate(mContext, itemLayout, null);
            if(covertViewListener!=null){
                covertViewListener.covert(itemView,items.get(i));
            }
            final int finalI = i;
            itemView.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    if(onItemClickListener!=null){
                        onItemClickListener.onItemClick(finalI,items.get(finalI));
                    }
                }
            });
            addView(itemView);
        }
    }
    /**
     * 给item添加数据
     */
    public interface CovertViewListener<T>{
        void covert(View view,T data);
    }
    public interface OnItemClickListener<T>{
        void onItemClick(int position, T data);
    }
}

案例源码

https://github.com/myml666/SimpleListView

上一篇 下一篇

猜你喜欢

热点阅读