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

How to filter data in FirebaseRecyclerOptions by spinner?

我正在使用 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();

微调器点击项目,当位置为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) {
        }
    });

当用户在微调器中选择一个选项时,在您为所选选项创建新的 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)
}

那里 mAdapterFirebaseRecyclerAdapter 是你最初也将你的选项传递给的任何东西。