普通RecyclerView基類

CommonAdapter

public abstract class CommonAdapter<T> extends RecyclerView.Adapter<ViewHolder> {

    protected Context mContext;
    LayoutInflater mInflater;
    List<T> mDatas;

    public CommonAdapter(Context context, List<T> data) {
        this.mContext = context;
        this.mDatas = data;
        mInflater = LayoutInflater.from(context);
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = mInflater.inflate(getLayoutId(), viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        convert(viewHolder, mDatas.get(i), i);
    }

    @Override
    public int getItemCount() {
        return mDatas.size();
    }

    public abstract int getLayoutId();

    public abstract void convert(ViewHolder viewHolder, T item, int position);
}

ViewHolder

public class ViewHolder extends RecyclerView.ViewHolder {
    // 用來存放子View減少findViewById的次數
    private SparseArray<View> views;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        views = new SparseArray<>();
    }

    public ViewHolder setText(int viewID, @NonNull CharSequence text) {
        TextView tv = getView(viewID);
        tv.setText(text);
        return this;
    }

    /**
     * 獲取view
     *
     * @param viewId 要獲取的id
     * @param <T>    泛型
     * @return 返回
     */
    public <T extends View> T getView(int viewId) {
        View view = views.get(viewId);
        if (view == null) {
            view = itemView.findViewById(viewId);
            views.put(viewId, view);
        }

        return (T) view;
    }

    /**
     * 設置指定view的顯示隱藏
     *
     * @param viewID     viewId
     * @param visibility 是否可見
     * @return 返回
     */
    public ViewHolder setViewVisibility(int viewID, int visibility) {
        getView(viewID).setVisibility(visibility);
        return this;
    }

    /**
     * 設置指定view的圖片
     *
     * @param viewId     viewId
     * @param resourceId 圖片id
     * @return 返回
     */
    public ViewHolder setImageResource(int viewId, int resourceId) {
        ImageView iv = getView(viewId);
        iv.setImageResource(resourceId);
        return this;
    }

    public void setOnItemClickListener(View.OnClickListener onClickListener) {
        itemView.setOnClickListener(onClickListener);
    }

    public void setOnItemLongClickListener(View.OnLongClickListener onLongClickListener) {
        itemView.setOnLongClickListener(onLongClickListener);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章