2

I have a fragment in which with RecyclerView I show all the objects from Firebase DB. In the same fragment I have an EditText.

Goal: The user can search within the Firebase DB. The results of the search should be populated in the same RecyclerView, where originally are shown all the object from the DB. For this reason I am using FirebaseRecyclerAdapter which is provided by FirebaseUI Version 3.2.2. To reach this result I was following this YouTube tutorial https://www.youtube.com/watch?v=b_tz8kbFUsU.

Problem: The results are not shown and the search function does not work.

Here is my code.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         final Bundle savedInstanceState) {

    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_best_buys, container, false);

    recView = view.findViewById(R.id.fragment_best_buys_recycler_view_two);
    databaseReference = FirebaseDatabase.getInstance().getReference(Database_Path);

        // Edit Text Listener
    mEditText = view.findViewById(R.id.fragment_best_buys_edit_text);
    Button test = view.findViewById(R.id.faccia_search);
    test.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String searchText = mEditText.getText().toString();
            firebaseUserSearch(searchText);
        }
    });

    return view;
}

private void firebaseUserSearch(String searchText) {

    System.out.print("I am searching: " + searchText);

    Toast.makeText(getActivity(), "Started Search " + searchText, Toast.LENGTH_LONG).show();

    Query firebaseSearchQuery = databaseReference.orderByChild("product_name")
             .startAt(searchText)
             .endAt(searchText + "\uf8ff");

    FirebaseRecyclerOptions<BestBuysProducts> options =
            new FirebaseRecyclerOptions.Builder<BestBuysProducts>()
                    .setQuery(firebaseSearchQuery, BestBuysProducts.class)
                    .build();

    FirebaseRecyclerAdapter<BestBuysProducts, BestBuysViewHolder> adapter = new FirebaseRecyclerAdapter<BestBuysProducts, BestBuysViewHolder>(options) {
        @Override
        public BestBuysViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_best_buys, parent, false);
            return new BestBuysViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(@NonNull BestBuysViewHolder holder, int position, @NonNull BestBuysProducts model) {
            holder.setDetails(getContext(), model.getProduct_name());

        }};

    recView.setLayoutManager(new LinearLayoutManager(getContext()));
    recView.setAdapter(adapter);

}

View Holder Class

public static class BestBuysViewHolder extends RecyclerView.ViewHolder {

    View mView;

    public BestBuysViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
    }


    public void setDetails(final Context ctx, final String productName) {
        TextView titleTextView = itemView.findViewById(R.id.item_best_buys_title);
        titleTextView.setText(productName);
    }

Thank you!

Kiwi
  • 173
  • 2
  • 9
  • Possible duplicate of [FirebaseListAdapter not pushing individual items for chat app - Firebase-Ui 3.1](https://stackoverflow.com/questions/47228262/firebaselistadapter-not-pushing-individual-items-for-chat-app-firebase-ui-3-1) – Peter Haddad Mar 02 '18 at 16:51
  • Please see my answer from this **[post](https://stackoverflow.com/questions/49080710/output-not-showing-when-the-firebase-ui-upgrade-to-3-2-2/49082537)**. Just answered a few minutes ago. Is the exact same problem. I cannot mark as duplicate because it isn't accpeted yet. If you will follow all those steps, will work for sure. – Alex Mamo Mar 03 '18 at 09:12

1 Answers1

2
private void firebaseUserSearch(String searchText) {

    /*Toast.makeText(AllUserActivity.this, "Started Search", Toast.LENGTH_LONG).show();*/
    progressBar.setVisibility(View.VISIBLE);


    Query firebaseSearchQuery = mUserDatabase.orderByChild("name").startAt(searchText).endAt(searchText + "\uf8ff");

    //set Options
    FirebaseRecyclerOptions<Users> options =
            new FirebaseRecyclerOptions.Builder<Users>()
                    .setQuery(firebaseSearchQuery, Users.class)
                    .setLifecycleOwner(this)
                    .build();

    adapter = new FirebaseRecyclerAdapter<Users, UserviewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull UserviewHolder holder, int position, @NonNull Users model) {

            holder.setNama(model.getName());

            holder.setstatus(model.getAddress());
            holder.setMcCircleImageView(model.getThumb_image());

            progressBar.setVisibility(View.GONE);





            final String user_id = getRef(position).getKey();

            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {


                    if (!user_id.equals(FirebaseAuth.getInstance().getCurrentUser().getUid())){

                        Intent i = new Intent(AllUserActivity.this, ProfilActivity.class);
                        i.putExtra("user_id", user_id);
                        startActivity(i);
                    }else {
                        Intent i = new Intent(AllUserActivity.this, AcountSettings.class);
                        i.putExtra("user_id", user_id);
                        startActivity(i);
                    }

                }
            });
        }

        @NonNull
        @Override
        public UserviewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View mView = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_singgle_layout, parent, false);
            return new UserviewHolder(mView);
        }
    };

    mListView.setAdapter(adapter);

}

private void closeKeyboard(){
    View view = this.getCurrentFocus();
    if (view != null){
        InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        if (inputMethodManager != null) {
            inputMethodManager.hideSoftInputFromInputMethod(view.getWindowToken(), 0);
        }
    }
}
@Override
protected void onStart() {
    super.onStart();


    //important for fibrebase database ui
    adapter.startListening();




}

@Override
protected void onStop() {
    super.onStop();
    //important for fibrebase database ui
    adapter.stopListening();
}

//VIEW HOLDER
public class UserviewHolder extends RecyclerView.ViewHolder {
    View mView;
    TextView mdisplayname,mstatus ;
    CircleImageView mcCircleImageView;
    public UserviewHolder(View itemView) {
        super(itemView);
        mView = itemView;

        mdisplayname = (TextView) mView.findViewById(R.id.user_singgle_name);
        mstatus  = (TextView) mView.findViewById(R.id.user_single_status);
        mcCircleImageView = (CircleImageView) mView.findViewById(R.id.profil_single_layout);



    }
    public void setNama(String display_name){

        mdisplayname.setText(display_name);

    }
    public void setstatus(String status){
        mstatus.setText(status);
    }
    public  void setMcCircleImageView(final String img_uri){
        //Picasso.with(UsersActivity.this).load(img_uri).placeholder(R.drawable.user).into(mcCircleImageView);
        if (!img_uri.equals("default")){
            Picasso.with(AllUserActivity.this).load(img_uri).networkPolicy(NetworkPolicy.OFFLINE)
                    .placeholder(R.drawable.default_avatar).into(mcCircleImageView, new Callback() {
                @Override
                public void onSuccess() {

                }

                @Override
                public void onError() {
                    Picasso.with(AllUserActivity.this).load(img_uri).placeholder(R.drawable.default_avatar).into(mcCircleImageView);

                }
            });

        }else{
            Picasso.with(AllUserActivity.this).load(R.drawable.default_avatar).into(mcCircleImageView);

        }
    }
}
Bart
  • 2,606
  • 21
  • 32
Yudi karma
  • 324
  • 3
  • 15