首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

RecyclerView -如何将onBindViewHolder的位置传递给ViewHolder类?

在RecyclerView中,我们可以通过使用构造函数或setter方法将onBindViewHolder的位置传递给ViewHolder类。

方法1:通过构造函数传递位置 我们可以在ViewHolder类的构造函数中添加一个额外的参数来接收位置信息。例如:

代码语言:txt
复制
public class MyViewHolder extends RecyclerView.ViewHolder {
    public MyViewHolder(View itemView, int position) {
        super(itemView);
        // 在这里可以使用传递进来的位置信息进行处理
    }
}

然后,在onCreateViewHolder方法中,我们创建ViewHolder对象时,将位置信息传递给它:

代码语言:txt
复制
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
    return new MyViewHolder(itemView, position);
}

方法2:通过setter方法传递位置 我们也可以在ViewHolder类中添加一个setter方法来接收位置信息,并在onCreateViewHolder方法中调用该方法进行传递。例如:

代码语言:txt
复制
public class MyViewHolder extends RecyclerView.ViewHolder {
    public void setPosition(int position) {
        // 在这里可以使用传递进来的位置信息进行处理
    }
}

然后,在onCreateViewHolder方法中,我们创建ViewHolder对象后,调用setPosition方法传递位置信息:

代码语言:txt
复制
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
    MyViewHolder viewHolder = new MyViewHolder(itemView);
    viewHolder.setPosition(position);
    return viewHolder;
}

通过以上两种方式,我们可以将onBindViewHolder的位置信息传递给ViewHolder类,以便在ViewHolder类中进行相应的处理操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 安卓开发——Recycleview

    我们这样思考,当我们去完成一个界面的布局时,我们要向里面传数据,怎么去传呢?全写在xml文件里显而不合适,这就是Adapter的作用。...而设置布局管理器RecyclerView则是来控制Item的布局方式,横向、竖向以及瀑布流方式 例如:你想控制横向或者纵向滑动列表效果可以通过LinearLayoutManager这个类来进行控制(与...创建适配器实现步骤如下: ① 创建Adapter:创建一个继承RecyclerView.Adapter的Adapter类 ② 创建ViewHolder:在Adapter中创建一个继承RecyclerView.ViewHolder...该方法把View直接封装在ViewHolder中,然后我们面向的是ViewHolder这个实例,当然这个ViewHolder就是前面的那个静态内部类的实例 2. onBindViewHolder()...在这里,补充一个知识点,关于RecyclerView的调用顺序总是按照: 获取大小——>绑定布局——>加载ViewHolder类——>绑定数据 这样一个规律的,通过这样的规律,我们就能知道是按照怎样的顺序来调用这些重载函数的了

    2.2K11

    RecyclerView的那点事儿

    动画,指定Item之间的分隔线 RecyclerView相关的重要类 Adapter ViewHolder LayoutManager ItemDecoration ItemAnimator 添加RecyclerView...采用layout_margin的方式 * * 主要是动态设置View的高度 adapter类中的 onBindViewHolder */ public class StaggeredGridLayuoutAct...); } 为RecyclerView添加item的点击事件 方法一:利用回调的方式实现(不太完善,仍可实现) 实现步骤如下: 在adapter类中,定义接口,接口中定义两个方法分别对应click...()中的v.getTag()方法,这需要在onBindViewHolder()方法中设置和item相关的数据 @Override public void onBindViewHolder(ViewHolder...view的setOnClickListener本来就是观察者模式,我们将这个观察者模式的事件监听传递给了我们自己的观察者模式。

    2K30

    RecyclerView实现混合布局

    我们可以看到,这个RecyclerView中有多种item显示出来,那么具体怎么实现呢,其实在RecyclerView中,我们可以重写方法getItemViewType(),这个方法会传进一个参数position...步骤: 1:item的布局文件(xml) 2:item的bean类(第二个方法写一个) 3:自定义ViewHolder类继承RecyclerView.ViewHolder 4:自定义adapter继承...  c:onBindViewHolder绑定数据 5:主文件中设置recyclerview的布局样式,赋值调试  1:Item  xml布局文件和Bean类,ViewHolder创建。...(View view);这个方法是自定义的需要继承RecyclerView.ViewHolder public class TypeViewHolderOne extends RecyclerView.ViewHolder...*/ @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { //优化

    2.3K20

    Kotlin入门(23)适配器的进阶表达

    前面在介绍列表视图和网格视图时,它们的适配器代码都存在视图持有者ViewHolder,因为Android对列表类视图提供了回收机制,如果某些列表项在屏幕上看不到了,则系统会自动回收相应的视图对象。...、长按监听器itemLongClickListener等等,故而完全可以把这些通用部分提取到一个基类,然后具体业务再从该基类派生出特定的业务适配器类。...    //绑定视图持有者中的各个控件对象,需要子类重写     override abstract fun onBindViewHolder(holder: RecyclerView.ViewHolder...、onCreateViewHolder、onBindViewHolder三个方法,以及视图持有者的类定义 class RecyclerGridAdapter(context: Context, private...,作为外部传进来的变量。

    1.8K41

    可展开Recyclerview适配器支持Header、Footer、Empty、LoadMore

    可展开的Adapter支持的功能如下: 支持两行可展开能力(单一类型适配) 支持空状态; 支持Header、Footer的适配 LoadMore的适配 使用类:BaseExpandableRecyclerViewAdapter...(RecyclerView.ViewHolder holder) { } }); (5)点击的监听 adapter.setListener...基本原理 基本继承RecyclerView.Adapter复写的类中封装了一些常用到的写法,抽象出来 (1)在getItemViewType中分别对ViewType做区分:VIEW_TYPE_EMPTY...其中将Group和Child也当作为一种类型进行区分,根据position、及group和child的数量可以计算出折叠或者展开之后的位置。...@Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, @NonNull

    78310

    RecyclerView局部刷新机制——payload

    在RecyclerView中搜索getUnmodifiedPayloads函数,发现其中一处应该跟我们的问题有关 boolean canReuseUpdatedViewHolder(RecyclerView.ViewHolder...viewHolder, viewHolder.getUnmodifiedPayloads()); } payloads应该对这个函数的返回值有影响,继续看mItemAnimator的对应函数。...这个mItemAnimator也是一个接口,实现类是DefaultItemAnimator,它的对应函数 public boolean canReuseUpdatedViewHolder(@NonNull...先看看它们俩个有什么用 mChangedScrap 与RecyclerView分离的ViewHolder列表 mAttachedScrap 未与RecyclerView分离的ViewHolder列表...而在滑动中不仅位置一直变,因为进度也在变,所以不停的进行移除bind,就会导致重影的现象。 而使用了payload后,不会移除重新bind,只更新进度条自己,就不会闪烁或重影了。

    3.3K30

    Android新组件RecyclerView介绍,其效率更好

    holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder...list.remove(position); notifyItemRemoved(position); } } 第二点:LayoutManager 这个LayoutManager类决定视图被放在画面中哪个位置...LayoutManager只有一个叫做LinearLayoutManager的实现类,我们可以设置它的横向和纵向。...它不关心如何将子View放在合适的位置,也不关心如何分割这些子View,更不关心每个子View各自的外观。更进一步来说就是RecyclerView它只负责回收和重用的工作,这也是它名字的由来。...所有关于布局、绘制和其他相关的问题,也就是跟数据展示相关的所有问题,都被委派给了一些”插件化”的类来处理。这使得RecyclerView的API变得非常灵活。你需要一个新的布局么?

    1.4K90

    基于滑动场景解析RecyclerView的回收复用机制原理

    都是复用的,因为没有 create viewHolder 的日志,然后只有后面3个卡位重新绑定数据,调用了onBindViewHolder();那么问题来了: Q2: 在这个过程中,为什么当 RecyclerView...第6步 这个就是常说扩展类了,RecyclerView 提供给我们自定义实现的扩展类,我们可以重写 getViewForPositionAndType() 方法来实现自己的复用策略。...来使用了,这也就是为什么从这里拿的 ViewHolder 都需要重新 onBindViewHolder() 了。...,回收时,最新的 ViewHolder 都是往 mCachedViews 里放,如果它满了,那就移出一个扔到 ViewPool 里好空出位置来缓存最新的 ViewHolder。...答:有时一行只有3个卡位需要重新绑定的原因跟Q2一样,因为 mCachedView 里正好缓存着当前位置的 ViewHolder,本来就是它的 ViewHolder 当然可以直接拿来用。

    3K60

    浅谈RecyclerView的性能优化

    RecyclerView的复用原理 当RecyclerView要拿一个复用的ViewHolder时: 如果是预加载,则会先去mChangedScrap中精准查找(分别根据position和id)对应的ViewHolder...【最重要】 2.优化onBindViewHolder方法,减少ViewHolder绑定的时间。...由于ViewHolder可能会进行多次绑定,所以在onBindViewHolder()尽量只做简单的工作。 3.优化onCreateViewHolder方法,减少ViewHolder创建的时间。...和上面讲的传入payload原理一样,这两个是Android默认提供给我们使用的两个封装类。这里我以DiffUtil举例说明该如何使用。...应当把事件的绑定在ViewHolder创建的时候和对应的rootView进行绑定。 2.数据处理与视图绑定分离,去除onBindViewHolder方法里面的耗时操作,只做纯粹的数据绑定操作。

    1.8K10
    领券