Android RecyclerView的使用过程遇到的问题

来源:互联网 发布:三国杀程昱淘宝 编辑:程序博客网 时间:2024/04/28 02:24

RecyclerView滚动显示图片

一概述
本来关于Recycler的博客鸿洋大神已经写的非常好请看 Android 自定义RecyclerView 实现真正的Gallery效果:为了加强记忆,我补充一些在我实现时遇到的问题

二 我遇到的问题
1在重写recyclerView 的适配器遇到的问题:

public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.ViewHolder> static public class ViewHolder extends RecyclerView.ViewHolder {        public ViewHolder(View itemView) {            super(itemView);        }        public ImageView img;        public TextView text;    }

这里重用布局视图自定义的类需要用静态类,且在继承RecyclerView.Adapter

private OnClickListener OnItemClickListener;    public OnClickListener getOnItemClickListener() {        return OnItemClickListener;    }    public void setOnItemClickListener(OnClickListener onItemClickListener) {        OnItemClickListener = onItemClickListener;    }    @Override    public void onBindViewHolder(ViewHolder mViewHolder, final int position) {        mViewHolder.img.setImageResource(listImgs.get(position));        mViewHolder.text.setText(String.valueOf(position));        if (OnItemClickListener!=null) {            mViewHolder.itemView.setOnClickListener(OnItemClickListener);        }

在写recyclerview的点击事件时我首先想到的不是自定义的回调接口而是用的系统的OnClickListener 的单击回调接口,在onBindViewHolder中调用回调接口
if (OnItemClickListener!=null) {
mViewHolder.itemView.setOnClickListener(OnItemClickListener);
}
那么在主界面怎样设置图片资源:

    myAdapter.setOnItemClickListener(new View.OnClickListener() {               @Override            public void onClick(View v) {           img.setImageDrawable(((ImageView)v.findViewById(R.id.imgItem)).getDrawable());            }        });

R.id.imgItem是recyclerview中项的xml文件中imgview对应id

当然也可以自定义回调方法,多定义一个参数就行

interface CallBack{        void onclik(View view,int position);    }    if (callBack!=null) {            mViewHolder.itemView.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    callBack.onclik(v, position);                }            });        }

2在重写Recyclerview中遇到的问题

@Override    protected void onLayout(boolean changed, int l, int t, int r, int b) {        // TODO Auto-generated method stub        super.onLayout(changed, l, t, r, b);        crrentView=getChildAt(0);        if (onChangeLister!=null) {                 onChangeLister.onChange(crrentView);        }    }

这是初始化img

public void onScrolled(int arg0, int arg1) {        View newView=getChildAt(0);        if (onChangeLister!=null) {            if (!newView.equals(crrentView)) {                crrentView=newView;                onChangeLister.onChange(newView);            }        }    }

这个是滚动时替换imgview

源码下载

三总结
回调的使用:一个a类调用本类中定义的回调接口,在需要使用的b类中实现接口,一种通过a类中接口方法的参数传递给b类数据

0 0
原创粉丝点击