How to Implement Search for a Registered User Functionality in Social Media Android App?
This is the Part 9 of “Build a Social Media App on Android Studio” tutorial, and we are going to cover the following functionalities in this article:
- We are going to Search For a user on the Users Page.
- If there are few people registered in our app then it is easy to search for a person.
- But what happens when we have 1000 users registered in our app then searching for a particular user became a very complicated and time taking task.
- That’s why we are implementing this feature to search for a user using the name or email provided.
Step By Step Implementation
Step 1: Working with the main_menu.xml file
Add the Search icon in the main_menu.xml file.
XML
< item android:id = "@+id/search" android:icon = "@drawable/ic_search" android:title = "Search" app:actionViewClass = "android.widget.SearchView" app:showAsAction = "always" > </ item > |
Step 2: Working with the UsersFragment.java file
Add the searchusers() in this file.
Java
private void searchusers( final String s) { final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser(); DatabaseReference reference = FirebaseDatabase.getInstance().getReference( "Users" ); reference.addValueEventListener( new ValueEventListener() { @Override public void onDataChange( @NonNull DataSnapshot dataSnapshot) { usersList.clear(); for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) { ModelUsers modelUsers = dataSnapshot1.getValue(ModelUsers. class ); if (!modelUsers.getUid().equals(firebaseUser.getUid())) { if (modelUsers.getName().toLowerCase().contains(s.toLowerCase()) || modelUsers.getEmail().toLowerCase().contains(s.toLowerCase())) { usersList.add(modelUsers); } } adapterUsers = new AdapterUsers(getActivity(), usersList); adapterUsers.notifyDataSetChanged(); recyclerView.setAdapter(adapterUsers); } } @Override public void onCancelled( @NonNull DatabaseError databaseError) { } }); } |
Below is the updated code for the UsersFragment.java file.
Java
package com.example.socialmediaapp; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.SearchView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.view.MenuItemCompat; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; import java.util.ArrayList; import java.util.List; /** * A simple {@link Fragment} subclass. */ public class UsersFragment extends Fragment { RecyclerView recyclerView; AdapterUsers adapterUsers; List<ModelUsers> usersList; FirebaseAuth firebaseAuth; public UsersFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_users, container, false ); recyclerView = view.findViewById(R.id.recyclep); recyclerView.setHasFixedSize( true ); recyclerView.setLayoutManager( new LinearLayoutManager(getActivity())); usersList = new ArrayList<>(); firebaseAuth = FirebaseAuth.getInstance(); getAllUsers(); return view; } private void getAllUsers() { final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser(); DatabaseReference reference = FirebaseDatabase.getInstance().getReference( "Users" ); reference.addValueEventListener( new ValueEventListener() { @Override public void onDataChange( @NonNull DataSnapshot dataSnapshot) { usersList.clear(); for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) { ModelUsers modelUsers = dataSnapshot1.getValue(ModelUsers. class ); if (modelUsers.getUid() != null && !modelUsers.getUid().equals(firebaseUser.getUid())) { usersList.add(modelUsers); } adapterUsers = new AdapterUsers(getActivity(), usersList); recyclerView.setAdapter(adapterUsers); } } @Override public void onCancelled( @NonNull DatabaseError databaseError) { } }); } private void searchusers( final String s) { final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser(); DatabaseReference reference = FirebaseDatabase.getInstance().getReference( "Users" ); reference.addValueEventListener( new ValueEventListener() { @Override public void onDataChange( @NonNull DataSnapshot dataSnapshot) { usersList.clear(); for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) { ModelUsers modelUsers = dataSnapshot1.getValue(ModelUsers. class ); if (modelUsers.getUid() != null && !modelUsers.getUid().equals(firebaseUser.getUid())) { if (modelUsers.getName().toLowerCase().contains(s.toLowerCase()) || modelUsers.getEmail().toLowerCase().contains(s.toLowerCase())) { usersList.add(modelUsers); } } adapterUsers = new AdapterUsers(getActivity(), usersList); adapterUsers.notifyDataSetChanged(); recyclerView.setAdapter(adapterUsers); } } @Override public void onCancelled( @NonNull DatabaseError databaseError) { } }); } @Override public void onCreate( @Nullable Bundle savedInstanceState) { setHasOptionsMenu( true ); super .onCreate(savedInstanceState); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.main_menu, menu); menu.findItem(R.id.logout).setVisible( false ); MenuItem item = menu.findItem(R.id.search); SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); searchView.setOnQueryTextListener( new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { if (!TextUtils.isEmpty(query.trim())) { searchusers(query); } else { getAllUsers(); } return false ; } @Override public boolean onQueryTextChange(String newText) { if (!TextUtils.isEmpty(newText.trim())) { searchusers(newText); } else { getAllUsers(); } return false ; } }); super .onCreateOptionsMenu(menu, inflater); } } |
Output:
Note: Please Add drawable items before running the Application
Below is the file structure after performing these operations:
Contact Us