android - 如何过滤 Firebase 回收站视图?
问题描述
我有一个与我的 firestore 数据库链接的 android 应用程序。我正在从 firestore 获取数据,并在 firebaseRecyclerView 的帮助下在回收站视图中显示结果。我的应用程序运行良好,我能够在我的回收站视图中显示所有结果。
现在我想添加使用微调器过滤已获取数据的功能。即用户首先看到所有结果,然后使用微调器只显示相关数据。当 firestore/recycler 视图为空时没有结果时,我能够处理这种情况。
要过滤,我想我可能必须使用微调器的 onItemSelected 函数,但是,我不知道应该如何进行。要过滤,我基本上会比较两个字符串。一个来自从 spinner 中选择的文本,一个来自 recyclerview 行的每个 Textview。
请让我知道我应该如何进行。
这是我的 onCreate 方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_query);
filter_price_text = findViewById(R.id.filter_price_text);
recyclerView = findViewById(R.id.recyclerView_tProfile);
emptyView = findViewById(R.id.empty_view);
query = db
.collection("tUsers")
.whereEqualTo(testArray[0], true)
.whereEqualTo(testArray[1], true)
.whereEqualTo("pincode", customerPincode)
.whereEqualTo("sector", customerSector); //query is working . ignore what I'm querying for. I have removed unimportant data from onCreate
FirestoreRecyclerOptions<TProfileModel> options = new FirestoreRecyclerOptions.Builder<TProfileModel>().setQuery(query, TProfileModel.class).build();
adapter = new FirestoreRecyclerAdapter<TProfileModel, profileViewHolder>(options) {
@NonNull
@Override
public profileViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.t_profile_row, parent, false);
return new profileViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull profileViewHolder holder, int position, @NonNull final TProfileModel model) { //final added manually to test should remove
holder.t_name.setText(model.getName());
String tsector = "Sector : " + model.getSector();
holder.t_sector.setText(tsector);
String tpin = "Pincode : " + model.getPincode();
holder.t_pincode.setText(tpin);
String trating = "Rating : " + model.getRating();
holder.t_rating.setText(trating);
String tprice = "Avg. Price : " + model.getAvgPriceRange();
holder.t_price.setText(tprice);
ta_price = model.getAvgPriceRange();//will be used for comparing with spinner data
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainQueryActivity.this, ViewTActivity.class);
intent.putExtra("name", model.getName());
intent.putExtra("sector", model.getSector());
intent.putExtra("pincode", model.getPincode());
startActivity(intent);
}
});
}
@Override
public void onDataChanged() {
emptyView.setVisibility(getItemCount() == 0 ? View.VISIBLE : View.GONE);
priceFilter.setVisibility(getItemCount() == 0 ? View.GONE : View.VISIBLE);
filter_price_text.setVisibility(getItemCount() == 0 ? View.GONE : View.VISIBLE);
}
@Override
public void onError(FirebaseFirestoreException e) {
// Called when there is an error getting a query snapshot. You may want to update
// your UI to display an error message to the user.
// ...
}
};
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
priceFilter = findViewById(R.id.priceFilter_spinner);
ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(this, R.array.t_price_spin, android.R.layout.simple_spinner_item);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
priceFilter.setAdapter(adapter1);
final String spinner_price = priceFilter.getSelectedItem().toString().trim();
priceFilter.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//compare ta_price with spinner_price
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
解决方案
推荐阅读
- angular - Apache 2.4 托管角度不发送所有请求
- android - 当父元素获得焦点时,如何让 TalkBack 忽略一个元素,同时仍阅读其内容描述?
- python - Python - 每个 WebSocket 连接作为一个单独的进程
- python - 当用户按下其中任何一个时,如何使多个 tkinter 按钮一起按下?
- mongodb - (MongoDB)聚合项目未能返回值
- python - 从 aws lambda (python) 访问 firebase
- python - 迭代数组并根据元素更改行
- javascript - 当另一个 div 到达视口中间时显示一个 div 元素
- java - 有人可以澄清为什么在下面的代码中名字被打印为 null 吗?
- c# - C# 中的“温度”属性