Reputation: 181
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!
Upvotes: 2
Views: 3393
Reputation: 324
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);
}
}
}
Upvotes: 2