使用微调菜单选择项过滤 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.
如果您正在读取微调器的数据,也来自实时数据库,请查看此答案:
我的 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.
如果您正在读取微调器的数据,也来自实时数据库,请查看此答案: