firebase / FirebaseUI-Android

Optimized UI components for Firebase
https://firebaseopensource.com/projects/firebase/firebaseui-android/
Apache License 2.0
4.63k stars 1.84k forks source link

How to update the query at run time using the same adapter and in same fragment. #1883

Open Princejack66 opened 3 years ago

Princejack66 commented 3 years ago

Step 3: Describe the problem:

I want to update the query at run time using the same adapter. I have a number of filters that I want to apply at run time to filter out the data from the real-time database. I have even tried the update option but that didn't work well and nothing happened.

Even the logcat don't show any error or bugs,

here is my code to update the query. Query to update

  Query newQuery = FirebaseDatabase.getInstance().getReference().child("King").orderByChild("Category").equalTo("Gaming");
        FirebaseRecyclerOptions<ToolsInfo> newOption = new FirebaseRecyclerOptions.Builder<ToolsInfo>().setQuery(newQuery,ToolsInfo.class).build();
        myAdapter.updateOptions(newOption);
        recyclerView.setAdapter(myAdapter);
        myAdapter.notifyDataSetChanged();

Adapter Code

package com.example.pjtools;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.media.Image;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.squareup.picasso.Picasso;
public class MyAdapter extends FirebaseRecyclerAdapter<ToolsInfo,MyAdapter.myViewHolder> {
    LoadingDialog loadingDialog;
    public MyAdapter(@NonNull FirebaseRecyclerOptions<ToolsInfo> options, Activity activity) {
        super(options);
        loadingDialog = new LoadingDialog(activity);
        loadingDialog.startLoading();
    }

    @Override
    protected void onBindViewHolder(@NonNull myViewHolder holder, int position, @NonNull ToolsInfo model) {
        holder.name.setText(model.getName());
        holder.date.setText("Release Date: " + model.getRelease_date());
        holder.version.setText("Version: " + model.getVersion());
        holder.category.setText("Category: " + model.getCategory());
        Picasso.get().load(model.getImageURL()).fit().into(holder.img);

        holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(holder.cardView.getContext(),ToolOpenActivity.class);
                intent.putExtra("id",model.getId());
                holder.cardView.getContext().startActivity(intent);
            }
        });
    }

    @NonNull
    @Override
    public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_row,parent,false);
        loadingDialog.stopLoading();
        return new myViewHolder(view);
    }

    class myViewHolder extends RecyclerView.ViewHolder{
        ImageView img;
        TextView name, date, version, category;
        CardView cardView;
        public myViewHolder(@NonNull View itemView) {
            super(itemView);
            img = itemView.findViewById(R.id.row_img);
            name = itemView.findViewById(R.id.row_name);
            date = itemView.findViewById(R.id.row_release_date);
            version = itemView.findViewById(R.id.row_version);
            category = itemView.findViewById(R.id.row_category);
            cardView = itemView.findViewById(R.id.cardView);

        }
    }

}
samtstern commented 3 years ago

@Princejack66 can you describe more specifically what's not working when you call updateOptions? Does the data change at all? Do you see any messages in the logs?

Princejack66 commented 3 years ago

Not a single change all data disappeared and I haven't noticed anything in logcat like error or warning I mean I want to filter my data when my fragment starts this query executes query = FirebaseDatabase.getInstance().getReference().child("King"); All I want to do when the user clicks on the menu item data must be filter. And I want to change the query to this Query newQuery = FirebaseDatabase.getInstance().getReference().child("King").orderByChild("Category").equalTo("Gaming"); after clicking on the menu item but the above-given code isn't working and not showing a single data after selecting the menu item.