Esta es la Parte 7 del tutorial «Crear una aplicación de redes sociales en Android Studio» , y vamos a cubrir las siguientes funcionalidades en este artículo:
- Vamos a buscar un blog en la página de inicio.
- Si hay pocos blogs en nuestra aplicación, es fácil buscar un blog manualmente. Pero lo que sucede cuando tenemos 1000 blogs y luego buscar un blog en particular se convierte en una tarea muy complicada y lleva mucho tiempo.
- Es por eso que estamos implementando esta función para buscar un blog usando el título o la descripción proporcionados .
- Además, hemos implementado la función Cerrar sesión en este artículo.
Implementación paso a paso
Paso 1: cree un botón de cierre de sesión y búsqueda en la carpeta del menú
Vaya a la aplicación > res > menú > haga clic con el botón derecho en > Nuevo > Archivo de recursos de menú y nombre el archivo como main_menu . A continuación se muestra el código para el archivo main_menu.xml .
XML
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/logout" android:title="Logout"> </item> <item android:id="@+id/search" android:icon="@drawable/ic_search" android:title="Search" app:actionViewClass="android.widget.SearchView" app:showAsAction="always"> </item> </menu>
Paso 2: trabajar con el archivo HomeFragment.java
Estamos buscando un blog en el Node «Publicaciones» utilizando el título y el valor de descripción. Si alguna clave-valor coincide, serán todos aquellos blogs cuyo valor contenga nuestro contenido de búsqueda.
if(modelPost.getTitle().toLowerCase().contains(search.toLowerCase())|| modelPost.getDescription().toLowerCase().contains(search.toLowerCase())) { posts.add(modelPost); }
A continuación se muestra el código para la funcionalidad de cierre de sesión
@Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { if (item.getItemId() == R.id.logout) { firebaseAuth.signOut(); startActivity(new Intent(getContext(), SplashScreen.class)); getActivity().finish(); } return super.onOptionsItemSelected(item); }
Vaya al archivo HomeFragment.java y consulte el siguiente código. A continuación se muestra el código completo y actualizado para el archivo HomeFragment.java .
Java
package com.example.socialmediaapp; import android.content.Intent; 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 android.widget.Toast; 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.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 HomeFragment extends Fragment { FirebaseAuth firebaseAuth; String myuid; RecyclerView recyclerView; List<ModelPost> posts; AdapterPosts adapterPosts; public HomeFragment() { // 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_home, container, false); firebaseAuth = FirebaseAuth.getInstance(); recyclerView = view.findViewById(R.id.postrecyclerview); recyclerView.setHasFixedSize(true); LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); layoutManager.setReverseLayout(true); layoutManager.setStackFromEnd(true); recyclerView.setLayoutManager(layoutManager); posts = new ArrayList<>(); loadPosts(); return view; } private void loadPosts() { DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Posts"); databaseReference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { posts.clear(); for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) { ModelPost modelPost = dataSnapshot1.getValue(ModelPost.class); posts.add(modelPost); adapterPosts = new AdapterPosts(getActivity(), posts); recyclerView.setAdapter(adapterPosts); } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { Toast.makeText(getActivity(), databaseError.getMessage(), Toast.LENGTH_LONG).show(); } }); } // Search post code private void searchPosts(final String search) { DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Posts"); databaseReference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { posts.clear(); for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) { ModelPost modelPost = dataSnapshot1.getValue(ModelPost.class); if (modelPost.getTitle().toLowerCase().contains(search.toLowerCase()) || modelPost.getDescription().toLowerCase().contains(search.toLowerCase())) { posts.add(modelPost); } adapterPosts = new AdapterPosts(getActivity(), posts); recyclerView.setAdapter(adapterPosts); } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { Toast.makeText(getActivity(), databaseError.getMessage(), Toast.LENGTH_LONG).show(); } }); } @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); 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)) { searchPosts(query); } else { loadPosts(); } return false; } @Override public boolean onQueryTextChange(String newText) { if (!TextUtils.isEmpty(newText)) { searchPosts(newText); } else { loadPosts(); } return false; } }); super.onCreateOptionsMenu(menu, inflater); } // Logout functionality @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { if (item.getItemId() == R.id.logout) { firebaseAuth.signOut(); startActivity(new Intent(getContext(), SplashScreen.class)); getActivity().finish(); } return super.onOptionsItemSelected(item); } }
Producción:
Para ver todos los archivos dibujables utilizados en este artículo, consulte este enlace: https://drive.google.com/drive/folders/1M_knOH_ugCuwSP5nkYzeD4dRp-Honzbe?usp=sharing
A continuación se muestra la estructura de archivos después de realizar estas operaciones: