如何通过微调器过滤 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 旋转框