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:
For all the drawable file used in this article please refer to this link: https://drive.google.com/drive/folders/1M_knOH_ugCuwSP5nkYzeD4dRp-Honzbe?usp=sharing
Below is the file structure after performing these operations:


… [Trackback]
[…] Read More Info here to that Topic: geeksforgeeks.org/how-to-implement-search-for-a-registered-user-functionality-in-social-media-android-app/ […]
… [Trackback]
[…] Here you will find 36349 additional Info on that Topic: geeksforgeeks.org/how-to-implement-search-for-a-registered-user-functionality-in-social-media-android-app/ […]