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

如何在Android RecyclerView适配器中过滤后获取原始条目位置?

在Android RecyclerView适配器中过滤后获取原始条目位置的方法如下:

  1. 首先,在适配器中定义一个原始数据列表和一个过滤后的数据列表。原始数据列表用于保存所有的数据,过滤后的数据列表用于保存符合过滤条件的数据。
  2. 在适配器的构造方法中,将原始数据列表初始化为传入的数据列表,并将过滤后的数据列表初始化为空列表。
  3. 实现一个过滤方法,该方法接收一个过滤关键字作为参数。在该方法中,遍历原始数据列表,将符合过滤条件的数据添加到过滤后的数据列表中。
  4. 在适配器的getItemCount()方法中,返回过滤后的数据列表的大小。
  5. 在适配器的getItem()方法中,根据传入的位置参数,从过滤后的数据列表中获取对应位置的数据。
  6. 在适配器中添加一个方法,用于获取原始数据列表中某个数据在过滤后的数据列表中的位置。可以通过遍历过滤后的数据列表,找到对应数据的位置,并返回该位置。

下面是一个示例代码:

代码语言:txt
复制
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private List<String> originalDataList; // 原始数据列表
    private List<String> filteredDataList; // 过滤后的数据列表

    public MyAdapter(List<String> dataList) {
        originalDataList = dataList;
        filteredDataList = new ArrayList<>();
    }

    public void filter(String keyword) {
        filteredDataList.clear();
        for (String data : originalDataList) {
            if (data.contains(keyword)) {
                filteredDataList.add(data);
            }
        }
        notifyDataSetChanged();
    }

    @Override
    public int getItemCount() {
        return filteredDataList.size();
    }

    @Override
    public String getItem(int position) {
        return filteredDataList.get(position);
    }

    public int getOriginalPosition(int filteredPosition) {
        String filteredData = filteredDataList.get(filteredPosition);
        return originalDataList.indexOf(filteredData);
    }

    // 其他必要的方法和实现省略...
}

在使用该适配器时,可以通过调用filter()方法来过滤数据,然后通过调用getOriginalPosition()方法来获取过滤后的数据在原始数据列表中的位置。

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

相关·内容

RecyclerView】 六、RecyclerView.ItemDecoration 条目装饰 ( 简介 | onDraw | onDrawOver | getItemOffsets )

, 效果类似于 padding 或 margin ; 默认值四个边距都是 0 ; 针对特殊位置的特殊设置 : 如果需要取访问 Adapter 适配器的关联数据 , 调用 RecyclerView.getChildAdapterPosition...(View) , 方法获取适配器的该 View 组件位置 ; 然后将特殊位置可以设置不同的参数 , 即可实现 " 针对特殊位置的特殊设置 " 效果 ; void getItemOffsets(@NonNull...(View) * 方法获取适配器的该 View 组件位置 ; * * @param outRect 接受输出的矩形...允许应用在适配器的 item 条目组件之外, 添加特殊的绘图和布局...(View) * 方法获取适配器的该 View 组件位置 ; * * @param outRect 接受输出的矩形

55400

【Jetpack】DataBinding 架构组件 ⑥ ( RecyclerView 数据绑定 )

, 因此需要 将条目布局设置为 DataBinding 布局 ; 创建 item.xml 布局 , 将光标放置在第一个字符位置 , 按下 Alt + 回车 , 弹出如下下拉菜单 , 选择 " Convert...适配器 , 需要 实现对 RecyclerView 条目 DataBinding 布局 的 数据绑定 ; 首先 , 自定义 RecyclerView.ViewHolder 类 , 在其中维护 item.xml...类重写的 onCreateViewHolder 函数 , 获取 DataBinding 布局 , 并将其设置给 自定义的 RecyclerView.ViewHolder 对象 ; 获取 DataBinding...类重写的 onBindViewHolder 函数 , 为每个列表条目设置数据 ; 先通过参数的 MyViewHolder 对象获取其中的 ItemBinding 数据绑定布局对象 ; 之后为 holder.itemBinding...RecyclerView.Adapter DataBinding 布局 是 RecyclerView 条目的布局 , 需要 在 自定义 RecyclerView.Adapter , 为每个条目布局都绑定一个

66720

Android 事件分发】ItemTouchHelper 简介 ( 拖动滑动事件 | ItemTouchHelper.Callback 回调 )

事件分发】事件分发源码分析 ( Activity 各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup ) 【Android 事件分发...的上下左右拖动事件 进行处理 ; : 侧滑删除 功能 , 条目位置拖动交换 功能 , 就可以使用 ItemTouchHandler 实现 ; 如果 RecyclerView 没有添加 ItemTouchHandler...RecyclerView 对象 , 即可为该 RecyclerView 添加拖动事件 ; 添加 , 该 RecyclerView 自动可以进行上下左右拖动操作 , 用户可以自行添加相关的回调 ItemTouchHelper.Callback...从布局获取 RecyclerView recycler_view = findViewById(R.id.recycler_view); //2 ....从布局获取 RecyclerView recycler_view = findViewById(R.id.recycler_view); //2 .

1.7K10

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

废话不多说了,适配器例子如下: package com.pandastudios.pandastudios.adapter; import android.support.v7.widget.RecyclerView...(position); notifyItemRemoved(position); } } 第二点:LayoutManager 这个LayoutManager类决定视图被放在画面哪个位置...缺点: 在RecyclerView,没有一个onItemClickListener方法。所以目前在适配器处理这样的事件比较好。如果想要从适配器上添加或移除条目,需要明确通知适配器。...具体操作在适配器代码中就可以体现。 整体总结它的几点如下: Adapter:包装数据集合并且为每个条目创建视图。 ViewHolder:保存用于显示每个数据条目的子View。...LayoutManager:将每个条目的视图放置于适当的位置。 ItemDecoration:在每个条目的视图的周围或上面绘制一些装饰视图。

1.3K90

Android 事件分发】ItemTouchHelper 实现侧滑删除

因此在该案例 , 滑动幅度在水平方向上超过 0.5 倍的条目组件宽度 , 侧滑删除才能生效 ; 下面的操作 , 滑动在水平方向上没有超过组件宽度的 0.5 倍 , 滑动删除不生效 ; 下面的操作...viewHolder, int direction) { Log.i(TAG, "触发侧滑删除条目"); // 滑动指定的距离, 达到一定幅度, 就会触发该方法回调...()); } } 7、RecyclerView.Adapter 适配器的删除操作 删除数据列表的元素 , 并调用 notifyItemRemoved 触发删除动画 ; public...从布局获取 RecyclerView recycler_view = findViewById(R.id.recycler_view); //2 ....@NonNull RecyclerView.ViewHolder target) { // 拖动交换数据, 该方法交换 Adapter 的数据, 并刷新界面 Log.i

62320

安卓开发——Recycleview

的使用 在使用RecyclerView时候,必须指定一个适配器Adapter和一个布局管理器LayoutManager。...( new DividerGridItemDecoration(this )); //设置增加或删除条目的动画 recyclerView.setItemAnimator( new DefaultItemAnimator...所跟数字相同,如下图所示 修改原有xml文件 为了实现RecyclerView,我们将初始的xml文件修改为ConstrainLayout(约束布局)并添加RecyclerView 代码如下: <...微件之后,需要获取对象句柄,将其连接到布局管理器,并为要显示的数据附加适配器 创建适配器实现步骤如下: ① 创建Adapter:创建一个继承RecyclerView.Adapter的Adapter类...(linearLayoutManager); 2.使用RecycleView时适配器要继承 RecyclerView.Adapter,adapter必须实现

2.1K11

AndroidApp和车机开发:RecyclerView实现触摸和拖放的功能

引言 在现代应用程序,用户交互性是提供丰富用户体验的关键因素。RecyclerView作为Android处理列表和网格布局的强大组件,支持多种交互,包括拖放排序。...本文指导您如何在RecyclerView实现拖放功能,使用户能够通过长按和拖动来重新排序列表项,用Kotlin实现 长按和拖放操作 为了为RecyclerView添加长按拖放功能,我们将通过自定义ItemTouchHelper.Callback...) .... } 第三步:配置 RecyclerView适配器 在 MainActivity 配置 RecyclerView适配器: /** * @author Nimyears */ class...函数 在适配器实现 moveItem 函数,用于交换数据集中的元素位置,通知 RecyclerView 更新: 比较源位置和目标位置。...使用Collections.swap交换元素在列表位置。 调用notifyItemMoved通知RecyclerView元素已移动。

18520

Android Material Design系列之RecyclerView和CardView

注意的是:RecyclerView不提供ListView的setOnItemClickListener方法,我们可以在ViewHolder添加类似的点击事件。...所以要使用RecyclerView,要好好考虑以下几点: RecyclerView.Adapter:RecyclerView.Adapter包含了一种新型适配器,其实与以前我们使用的适配器基本类似,只是稍微有所不同...LayoutManager:这个LayoutManager类决定视图被放在画面哪个位置,但这只是它的众多职责之一。它可以管理滚动和循环利用。...建议大家参考: Android新组件RecyclerView介绍,其效率更好(可点击) 更多推荐: 偷懒新姿势,打造属于RecyclerView的万能适配器Adapter和ViewHolder 一种新的...HeaderView + RecyclerView 实现方式 RecyclerView上拉更多 RecyclerView具体使用不讲了,今天我们顺便讲一下如何在RecyclerView加上拉更多的效果吧

2K80

RecyclerView】 八、RecyclerView.ItemDecoration 条目装饰 ( onDraw 和 onDrawOver 绘制要点 )

, 并针对不同的序号代表的 item 条目进行不同的边距设置 ; Canvas 绘图的坐标系的 ( 0, 0 ) 位置RecyclerView 的左上角位置 ; 使用 Canvas 绘图时 ,...先获取指定组件 , 然后获取该组件相对于父容器 ( RecyclerView ) 的坐标 ; 绘图的流程 : ① 获取组件个数 ; ② 遍历组件 ; ③ 获取组件 View 对象 ; ④ 获取组件 View...获取当前设置边距的位置 int currentPosition = parent.getChildAdapterPosition(view); // 2....从布局获取 RecyclerView RecyclerView recycler_view = findViewById(R.id.recycler_view); /.../** * RecyclerView 适配器 */ public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder

1.3K00

在 View 上使用挂起函数 | 实战

这个 ID 映射到了季份列表的某一集; 该集的条目可能还没有被添加到 RecyclerView ,需要用户展开该季份的列表,然后将其滑动展示到屏幕上,这样我们需要的视图才能被 RecyclerView...的适配器对比新的数据集 // TODO 等待 RecyclerView 将新条目布局 // 滑动 RecyclerView 展示指定的剧集 recyclerView.scrollToItemId...)) } else { // 否则我们等待新的条目添加到适配器,然后在重试 adapter.registerAdapterDataObserver(object :...]添加到了数据集中,并返回该条目适配器位置 */ suspend fun RecyclerView.Adapter.awaitItemIdExists...注释中所说,由于 SmoothScroller 真正开始执行的时间是动画的下一帧,所以我们等待一帧再判断滑动状态。

1.4K30
领券