如何通过微调器过滤 FirebaseRecyclerOptions 中的数据?

Posted

技术标签:

【中文标题】如何通过微调器过滤 FirebaseRecyclerOptions 中的数据?【英文标题】:How to filter data in FirebaseRecyclerOptions by spinner? 【发布时间】:2021-03-30 19:16:19 【问题描述】:

我正在使用 Firebase 数据库在 RecyclerView 中显示数据。现在我想通过使用 android 微调器添加过滤器选项。当我尝试使用不同的查询时,代码不起作用。 如何使用微调器仅显示 1 个查询的数据并通过更改微调器项来刷新它? 此代码现在可以在没有微调器单击项的情况下工作。

DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    query = reference.child("student");
    FirebaseRecyclerOptions<ModelPromocje> options =
            new FirebaseRecyclerOptions.Builder<ModelPromocje>()
                    .setQuery(query, ModelPromocje.class)
                    .build();

Spinner 点击项,位置为 0 时应显示所有数据

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
            if (position == 0)
                query = reference.child("student");
            
            else if (position == 1)
                query = reference.child("student").orderByChild("course").equalTo("Math");
            
        

        @Override
        public void onNothingSelected(AdapterView<?> parent) 
        
    );

【问题讨论】:

【参考方案1】:

当用户在微调器中选择一个选项时,在为所选选项创建新的 query 后,您需要更新适配器以使用该新查询。

您可以通过使用新查询创建一个新的FirebaseRecyclerOptions 对象来做到这一点,然后通过调用其updateOptions 在适配器上设置它。

所以在你的onItemSelected

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
    if (position == 0)
        query = reference.child("student");
    
    else if (position == 1)
        query = reference.child("student").orderByChild("course").equalTo("Math");
    
    new FirebaseRecyclerOptions.Builder<ModelPromocje>()
            .setQuery(query, ModelPromocje.class)
            .build();

    // Change options of adapter.
    mAdapter.updateOptions(newOptions)

mAdapter 是您最初也将选项传递给的 FirebaseRecyclerAdapter

【讨论】:

非常感谢它有效。有没有办法只刷新firebase数据?现在,当我在微调器中切换选项时,它会转到我的布局顶部,这不是很用户友好:)

以上是关于如何通过微调器过滤 FirebaseRecyclerOptions 中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React Native 中制作微调器?我想通过 PanResponder 旋转框

从微调器中移除焦点

如何更改android微调器弹出动画

如何从我的EditText获取具有格式化日期的日期对象(通过微调器存储)

处于加载状态时如何向按钮添加微调器图标?

加载器同时使用关键字过滤数据