使用微调菜单选择项过滤 RecyclerView

Filtering RecyclerView with spinner menu selected item

我的 RecyclerView 在一个模型 class 和自定义适配器上正常工作,因为我的数据来自 Firebase 实时数据库。但现在我想用微调菜单过滤适配器。就像当用户从菜单中选择一个项目时,RecyclerView 将被过滤,只有它会显示与所选项目相似的项目。那么我该如何实现呢?

public class Doctor extends AppCompatActivity {
    RecyclerView recyclerView2;
    myAdapter2 adapter2;
    @SuppressLint("ResourceType")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_doctor);
        recyclerView2=findViewById(R.id.recylerView2);
        recyclerView2.setLayoutManager(new LinearLayoutManager(this));
        FirebaseRecyclerOptions<model2> options =
                new FirebaseRecyclerOptions.Builder<model2>()
                        .setQuery(FirebaseDatabase.getInstance().getReference().child("Doctor_list"), model2.class)
                        .build();
        adapter2=new myAdapter2(options);
        recyclerView2.setAdapter(adapter2);
    }
    @Override
    protected void onStart() {
        super.onStart();
        adapter2.startListening();
    }
    @Override
    protected void onStop() {
        super.onStop();
        adapter2.stopListening();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.spinnermenu,menu);
        return super.onCreateOptionsMenu(menu);
    }
}

这是我的自定义菜单

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/medicine"
        android:title="Medicine"
        app:showAsAction="never">
    </item>
    <item
        android:id="@+id/phycology"
        android:title="Phycology"
        app:showAsAction="never">
    </item>
    <item
        android:id="@+id/orthopedic"
        android:title="Orthopedic"
        app:showAsAction="never">
    </item>
</menu>

假设您已经实现了微调器,要在用户选择微调器中的一个选项时创建新查询,您必须更新适配器以使用该新查询。为此,您必须使用新查询创建一个新的 FirebaseRecyclerOptions 对象,然后通过调用其 updateOptions() 方法在适配器上设置它。

假设您在微调器中的位置 0 和位置 1 有两个不同的值,请使用以下代码行:

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    if (position == 0 ){
        query = db.child("Doctor_list");
    } else if (position == 1) {
        query = reference.child("Doctor_list").orderByChild("name").equalTo("Sawon ahmed");
    }
    FirebaseRecyclerOptions<model2> newOptions = new FirebaseRecyclerOptions.Builder<model2>()
            .setQuery(query, model2.class)
            .build();
    adapter2.updateOptions(newOptions);  //Change the options object in the adapter.
}

其中 adapter2 对象是您传递给适配器的原始适配器对象。

P.S.

如果您正在读取微调器的数据,也来自实时数据库,请查看此答案: