Implementación de buscador Android Nativo

He aquí un tutorial en el cual aprenderás la forma mas fácil de implementar el buscador de Android. Como sabemos la búsqueda es una de las funcionalidades más típicas en una aplicación. Por ello, la necesidad de implementar la búsqueda en la ActionBar es algo con lo que vas a tener que enfrentarte tarde o temprano si quieres adaptarte a las guías de diseño de Android.
Para ello crea un nuevo proyecto en Android con el último SDK (necesita ser superior a la 3.0) llamado ejemploBuscador, y elige crear una Activity en blanco. Necesitaremos un botón de búsqueda, así que si no te lo ha creado automáticamente, crea un nuevo archivo XML de tipo menú, y llámalo por ejemplo buscador.xml. Crea un item que se muestre siempre con el icono de la búsqueda y dale un título. También le añadiremos la clase de la que tiene que tomar la vista, que será un objeto de la clase SearchView, quedando así:




    



les dejo la imagen del buscador para que la puedan implementar en le proyecto

En el XML activity_main.xml creamos un TextView con el id textoBuscado quedando así:


   

    

   

Posteriormente tendrás que implementar los metodos de OnQueryTextListener, OnActionExpandListener. Estos son los cuatro métodos que te pedirá completar. Son los eventos que se lanzan al escribir y al pulsar en buscar. Lo que hago es mostrar un Toast, estos métodos los colocamos en la clase donde vamos a utilizar el buscador en este caso es MainActivity.java


    @Override
    public boolean onMenuItemActionExpand(MenuItem item) {
        Toast.makeText(getApplicationContext(), "Buscador activado", Toast.LENGTH_SHORT).show();
        return true;
    }

    @Override
    public boolean onMenuItemActionCollapse(MenuItem item) {
        Toast.makeText(getApplicationContext(), "Buscador desactivado", Toast.LENGTH_SHORT).show();
        return true;
    }

    @Override
    public boolean onQueryTextSubmit(String s) {
        textoBuscado.setText("Texto buscado\n\n" + s);
        return false;
    }

    @Override
    public boolean onQueryTextChange(String s) {
        textoBuscado.setText("Escribiendo texto buscado...\n\n" + s);
        return false;
    }

Para utilizar los métodos en el MainActivity.java hay que realizar el implements en la clase de la siguiente manera:
    public class MainActivity extends ActionBarActivity implements OnQueryTextListener, OnActionExpandListener

Lo siguiente que tenemos que hacer es instancia el TextView en la clase de la siguiente manera:
    private TextView textoBuscado;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textoBuscado = (TextView) findViewById(R.id.textoBuscado);
    }

En el método onCreateOptionsMenu lo modificamos quedando así:
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.buscador, menu);

        MenuItem searchItem = menu.findItem(R.id.menu_buscador);

        SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        searchView.setOnQueryTextListener(this);

        MenuItemCompat.setOnActionExpandListener(searchItem, this);

        return super.onCreateOptionsMenu(menu);

    }
    

Agrego la clase MainActivity.java completa con todos los métodos ya listos.
package android.ejemplo.com.ejemplobuscador;

import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.view.MenuItemCompat.OnActionExpandListener;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView.OnQueryTextListener;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity implements OnQueryTextListener, OnActionExpandListener {

    private TextView textoBuscado;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textoBuscado = (TextView) findViewById(R.id.textoBuscado);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.buscador, menu);

        MenuItem searchItem = menu.findItem(R.id.menu_buscador);

        SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        searchView.setOnQueryTextListener(this);

        MenuItemCompat.setOnActionExpandListener(searchItem, this);

        return super.onCreateOptionsMenu(menu);

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onMenuItemActionExpand(MenuItem item) {
        Toast.makeText(getApplicationContext(), "Buscador activado", Toast.LENGTH_SHORT).show();
        return true;
    }

    @Override
    public boolean onMenuItemActionCollapse(MenuItem item) {
        Toast.makeText(getApplicationContext(), "Buscador desactivado", Toast.LENGTH_SHORT).show();
        return true;
    }

    @Override
    public boolean onQueryTextSubmit(String s) {
        textoBuscado.setText("Texto buscado\n\n" + s);
        return false;
    }

    @Override
    public boolean onQueryTextChange(String s) {
        textoBuscado.setText("Escribiendo texto buscado...\n\n" + s);
        return false;
    }
}


Espero les funcione y lo puedan implementar en todos sus proyectos. recuerden que pueden comentar si quieren extender este tutorial un poco más.

Comentarios

  1. como puedo hacer que las busquedas no distingas entre mayusculas y minusculas y tildes......si puedes escribeme a mi correo famarrero@estudiantes.uci.cu gracias de antemano...

    ResponderEliminar
    Respuestas
    1. hola Felix lo que yo haría para esto seria convertir la cadena en mayúsculas de esta manera
      miCadena.toUpperCase(); y para las tildes en android studio podrás encontrar el elemento "build.gradle", haz doble click en él y se te abrirá una ventana con el título "app" y el icono de gradle. Pues bien, en el código debes agregar la siguiente línea:

      android {

      compileOptions.encoding "ISO-8859-1"


      Es para que realice la compilación con los caracteres españoles.

      Eliminar
  2. Hola, como puedo hacer para que busque en una base de datos

    ResponderEliminar
    Respuestas
    1. Policarpo te recomiendo que mires este tutorial de mysql http://www.hablemosdeandroid.com/2015/12/como-conectar-mysql-con-android.html

      Eliminar
  3. sabes como hacer para que busque una palabra dentro de la aplicación?

    ResponderEliminar
    Respuestas
    1. hola Andres claro lo que no tengo es preparado un tutorial para explicarlo

      Eliminar
  4. Buen día.
    Este buscador permite encontrar la palabra en varias actividades de la app o solo es para el main?

    ResponderEliminar
    Respuestas
    1. hola Alvaro este tutorial solo te explica como implementar el buscador la funcionalidad de este ya la definen según el requerimiento que buscan, que bien puede ser buscar dentro de la app o en una base de datos.

      Eliminar
  5. BUENAS NOCHES UNA PREGUNTA...
    TENGO UN ARCHIVO CSV Y QUIERO QUE EL BUSCADOR ENCUENTRE EL VECTOR
    COMO LE PUEDO HACER QUE LE PUEDO MODIFICAR AL CODIGO QUE TIENES...
    SI ME PUDIERAS AYUDAR TE LO AGRADECERIA MUCHO

    ResponderEliminar
  6. Buen aporte, me sirvió bastante...

    ResponderEliminar
  7. hola, mi pregunta es como pueso hacer para que busque palabras solo dentro de una actividad en especifico

    ResponderEliminar

Publicar un comentario

Gracias por compartir tus comentarios con nosotros, si el comentario requiere de alguna respuesta por parte de nosotros, trataremos de responderte lo mas pronto posible.

Entradas populares de este blog

Como conectar MySQL con Android Nativo

Lista con imágenes Android nativo (ListView)

La nueva App de Android para trabajar