首页 > 解决方案 > 如何过滤 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) {

            }
        });


    }

标签: androidfirebaseandroid-recyclerviewgoogle-cloud-firestorefirebaseui

解决方案


推荐阅读