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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
7)使用RecyclerView显示列表的过程如下: a. 准备数据源 b. 创建RecyclerView实例,并设置LayoutManager c. 创建自定义的ViewHolder类 d. 创建自定义的Adapter类,继承RecyclerView.Adapter e. 在Adapter中重写onCreateViewHolder、onBindViewHolder、getItemCount方法 f. 将Adapter设置给RecyclerView 8)要使用RecyclerView显示网格形式数据,需要设置GridLayoutManager,代码如下: ``` recyclerView.setLayoutManager(new GridLayoutManager(this, 2)); // 2代表列数 ``` 9)RecyclerView的Adapter中onCreateViewHolder、onBindViewHolder、getItemCount这三个重写的方法作用如下: a. onCreateViewHolder:创建ViewHolder实例 b. onBindViewHolder:为ViewHolder绑定数据 c. getItemCount:获取列表中item的数量 10)JSON数据的结构是一种轻量级的数据交换格式,由键值对组成的集合,可以嵌套,常用于前后端数据交互。它由花括号 {} 包裹,每个键值对之间用逗号 , 分隔,键与值之间用冒号 : 分隔。例如: ``` { "name": "John", "age": 30, "address": { "city": "New York", "state": "NY" }, "phoneNumbers": [ { "type": "home", "number": "123-456-7890" }, { "type": "work", "number": "456-789-1234" } ] } ``` 11)要配置网络访问权限,需要在AndroidManifest.xml文件中添加如下代码: ``` <uses-permission android:name="android.permission.INTERNET" /> ``` 如果遇到不允许明文请求的问题,可以使用HTTPS协议或者手动配置网络安全策略。 12)使用Retrofit库的完整过程如下: a. 定义接口,使用注解标注请求方式、URL、请求参数等信息 b. 创建Retrofit实例,设置请求的基础URL、转换器、拦截器等 c. 通过Retrofit实例创建接口实例 d. 调用接口中的方法,发送请求 e. 处理响应结果 13)在Android Studio中为某个模块添加依赖,可以在build.gradle文件中添加依赖,例如: ``` dependencies { implementation 'com.android.support:appcompat-v7:28.0.0' } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值