当前位置: 首页 > 知识库问答 >
问题:

使用firebaserecycleradapter筛选recyclerview

白坚壁
2023-03-14

我有一个带有FireBaseRecyclerAdapter的RecyclerView。当用户开始输入SearchView时,我想用一个名称列表填充RecycerView。

public class SchoolsAdapter extends FirebaseRecyclerAdapter<School, SchoolsAdapter.SchoolViewHolder> {

    public SchoolsAdapter(Query ref) {
        super(School.class, R.layout.item_school, SchoolViewHolder.class, ref);
    }

    @Override
    public void populateViewHolder(SchoolViewHolder schoolViewHolder, School school, int position) {
        schoolViewHolder.name.setText(school.getName());
        schoolViewHolder.address.setText(school.getAddress());
    }

    static class SchoolViewHolder extends RecyclerView.ViewHolder {

        public TextView name;
        public TextView address;

        public SchoolViewHolder(View itemView) {
            super(itemView);
            name = (TextView) itemView.findViewById(R.id.school_item_tview_name);
            address = (TextView) itemView.findViewById(R.id.school_item_tview_address);
        }
    }
}
@Override
public boolean onQueryTextChange(String newText) {
    mRecyclerView.setAdapter(new SchoolAdapter(ref.orderByChild("name").startAt(userQuery).endAt(userQuery+"~")) 
    return false;
}

也是对查询进行忽略的方法吗?

共有1个答案

甄飞飙
2023-03-14

我刚刚完成了一些接近你所要找的东西,我不确定这是最优雅的解决方案,但我会抛出一些想法,如果你认为我的想法会有帮助,我肯定可以提供一些例子。

首先,当我扩展基本FirebaseAdapter时,我添加了一个名为mFullList的新筛选器,因为FirebaseAdapter的mItems将用于显示列表,所以我不想在没有必要的情况下继续返回到网络。然后重写子类中的所有方法,用Firebase回调的值更新mFullList,对它们进行排序,筛选它们,然后用新列表调用super.x()。

急忙道:

public reset(List)
   mFullList = List
   Collections.sort(mFullList, Comparator)
   getFilter().filter(filterString)
mFullList.get(pos).getName().toLowerCase().contains(filterString.toLowerCase);
filterCompleted(List)
   getItems().clear
   getItems().addAll
   notify
adapter.getFilter().filter("something")

若要根据更新的字段筛选列表,请执行以下操作:

adapter.getFilter().filter("")

重置完整列表(只要您的performFilter()正确处理了它。这样,来自FireBase的新更新将根据用户的选择进行过滤,并且当用户输入新值时,不需要发出新的FireBase网络请求。

 类似资料:
  • 我的页面中有一个名为“search_table”的DataTable。我在表中有一个附加的标题行,它具有不同的筛选选项(dropdown、text、date_pickers)。对于日期列,我有两个datepicker,一个用于min,一个用于max。我可以根据datepickers为datatable筛选数据,但有一个问题: 当我选择一个日期时,我的表中的所有行都消失了,我必须点击其中的一个标题(

  • 应用筛选器之前的示例使用者记录是(在值中查找GP_ID): 当我在kafkaListenerContainerFactory()中按如下方式设置recordFilterStrategy时: KafKareCordvo.ConvertByteBufferToLong正在将bytebuffer值转换为long值。 但是,当它被Kafka听众按以下方式消费时: 这将返回删除我筛选的字段值的记录:“gp_

  • 首先,我试图使选择所有复选框,如果我单击表头中的选择所有复选框,整个表行将选择并显示一个复选框反向消息,即我选择了多少复选框。这里的问题是,如果我单击select all复选框,反向消息不会显示楼上的表,即我选择了多少行。 其次,如果我从任何列中筛选任何数字,相同的数字将显示同一列中有多少行具有相同的数字。如果我选中了所有复选框,那么反向消息将显示我选中了多少行复选框。这里,问题是显示整个表行计数

  • 我正试图返回一份基于用户给定日期的患者名单。但每次我运行该方法时,它都会返回所有医生的列表,而不是经过筛选。 主屏幕上的代码 过滤方法 搜索患者日期的方法 我初始化了两个患者,即patient1和patient 2。病人1的医生叫李医生,病人2的医生叫詹姆斯医生。首先,我为patient1输入以下信息,而patient2现在什么都没有。 当我拿到医生名单时,问题就来了。即使日期是错误的,它仍会继续

  • 我需要筛选此查询,以便不显示值为的文档。当前,我的代码显示以下结果: 我需要一些过滤器,使消失,以便它显示我作为第一个值:。 我以前执行过以下操作:

  • 我需要过滤一个列表