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类数据

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐