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!