RecyclerView

来源:互联网 发布:javascript全选 编辑:程序博客网 时间:2024/05/29 03:41

简介

XXX

属性

  • 每item内容不改RecyclerView大小,此设提性能

    xRecyclerView.setHasFixedSize(true);

适配器

@Overridepublic void onBindViewHolder(final ViewHolder holder, int position) {}适配列表执行,点列表项不执行
/*** 自定义ViewHolder(持每Item界面全部元素)*/public class ViewHolder extends RecyclerView.ViewHolder {    public ImageView ivImageSelect;    public ViewHolder(final View view) {        super(view);        ivImageSelect = view.findViewById(R.id.ivImageSelect);    }}类实现点击接口且控件添监听,点控件执行
public class ImageShowAdapter extends RecyclerView.Adapter<ImageShowAdapter.ViewHolder> implements View.OnClickListener, View.OnLongClickListener {    private OnRecyclerViewItemClickListener mOnItemClickListener;    private OnRecyclerViewItemLongClickListener mOnItemLongClickListener;    @Override    public void onClick(View v) {        if (mOnItemClickListener != null) {            // Method getTag which get data.            mOnItemClickListener.onItemClickDeleteOrAdd(v, (ImageBean) v.getTag());        }    }    @Override    public boolean onLongClick(View v) {        if (mOnItemLongClickListener != null) {            // Method getTag which get data.            mOnItemLongClickListener.onItemLongClick(v, (ImageBean) v.getTag());        }        return true;    }    public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {        this.mOnItemClickListener = listener;    }    public void setOnItemLongClickListener(OnRecyclerViewItemLongClickListener listener) {        this.mOnItemLongClickListener = listener;    }    public interface OnRecyclerViewItemClickListener {        /**         * 短删或加         *         * @param view         * @param imageBean         */        void onItemClickDeleteOrAdd(View view, ImageBean imageBean);    }    public interface OnRecyclerViewItemLongClickListener {        /**         * 长点         *         * @param view         * @param imageBean         */        void onItemLongClick(View view, ImageBean imageBean);    }}短或长点列表项执行方法onItemClickDeleteOrAdd或onItemLongClick

适配器错误

日志

Caused by: java.lang.IllegalStateException: Observer com.jcodecraeer.xrecyclerview.XRecyclerView$DataObserver@3f43b8 is already registered.

分析

头调给适配器注册观察者,再调注册重复。

解决

mAdapter.setImageData(list);if (!mAdapter.hasObservers()) {    recyclerView.setAdapter(mAdapter);} else {    mAdapter.notifyDataSetChanged();}

监听

滑动

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {    @Override    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {        super.onScrollStateChanged(recyclerView, newState);        toastShort(String.valueOf(newState));    }    @Override    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {        super.onScrolled(recyclerView, dx, dy);        toastShort(dx + "||" + dy);    }});
  • 滑中onScrolled,滑前后onScrollStateChanged
  • 左上dx、dy正,右下dx、dy
  • 无滑且点某Item或无滑且适配器刷新,neState为0
  • Item量不足滑或滑至尽头,继滑newState为1

间距

package util;import android.graphics.Rect;import android.support.v7.widget.RecyclerView;import android.view.View;/** * Created on 2017/10/23. * * @desc recyclerView item space */public class SpaceItemDecoration extends RecyclerView.ItemDecoration {    private int space;    public SpaceItemDecoration(int space) {        this.space = space;    }    @Override    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {        outRect.left = space;        outRect.top = space;        outRect.right = space;        outRect.bottom = space;    }}

四周间距space,内部水平或垂直间距2*space

原创粉丝点击