Android – buscar listview?

¿Es posible con Android tener una barra de búsqueda para un ListView para que cuando se toca la barra de búsqueda aparece un teclado y cuando se escribe un texto en la barra de búsqueda, se muestran los elementos que coinciden en ListView?

Lo que realmente necesito es la barra de búsqueda que abre un teclado.

Actualizar:

He añadido el campo EditText que abre un teclado y puedo escribir en el campo EditText. Lo que quiero es que los primeros caracteres de los elementos de la lista mostrada en el ListView coincidan con los caracteres introducidos en la ventana EditText.

He intentado seguir el enfoque enumerado aquí ListView filtro, pero estoy un poco confundido en cuanto a la cantidad de filtrado ya se hace en ListView?

1) ¿Necesito crear una matriz separada que almacena los valores que coinciden con el texto escrito en EditText? Desde esta publicación Call adapter.notifyDataSetChanged , parece que ListView ya tiene una matriz de sombras para hacer esto, y se actualiza cuando adapter.notifyDataSetChanged (); se llama.

2) ¿Necesito llamar a adapter.notifyDataSetChanged (); Para tener ListView actualizado después de escribir algún texto en la ventana EditText?

3) ¿Necesito extender ListActivity como indica este post ? Si es así, ¿cómo puedo extender mi clase de actividad si la clase de actividad ya se está extendiendo desde la actividad principal?

4) Lo que actualmente tengo es el siguiente:

ArrayAdapter<String> adapter = null; private EditText filterText = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.symptom); ListView symptomList = (ListView) findViewById(R.id.ListView_Symptom); symptomList.setTextFilterEnabled(true); symptomList.setFastScrollEnabled(true); filterText = (EditText) findViewById(R.id.search_box); filterText.addTextChangedListener(filterTextWatcher); adapter = new ArrayAdapter<String>(this, R.layout.menu_item, symptomsArray); symptomList.setAdapter(adapter); private TextWatcher filterTextWatcher = new TextWatcher() { public void afterTextChanged(Editable s) { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { adapter.getFilter().filter(s); adapter.notifyDataSetChanged(); } }; 

Desafortunadamente en el momento en que escribo en el cuadro de EditText, consigo una excepción de NullPointer en

  Thread [<7> Filter] (Suspended (exception NullPointerException)) ArrayAdapter$ArrayFilter.performFiltering(CharSequence) line: 437 Filter$RequestHandler.handleMessage(Message) line: 234 Filter$RequestHandler(Handler).dispatchMessage(Message) line: 99 Looper.loop() line: 123 HandlerThread.run() line: 60 

Alguna idea de lo que estoy perdiendo?

Usted ha cometido un error muy pequeño: – crear adaptador de red antes de ajustar el texto cambiado. Escucha al texto de edición

Ver el código corregido

 public class SearchListView extends Activity { /** Called when the activity is first created. */ private ListView lv1; private String lv_arr[] = { "Android", "iPhone", "BlackBerry", "me", "J2ME", "Listview", "ArrayAdapter", "ListItem", "Us", "UK", "India" }; ListView lst; EditText edt; ArrayAdapter<String> arrad; @Override public void onCreate( Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); lv1=(ListView)findViewById(R.id.ListView01); edt = (EditText) findViewById(R.id.EditText01); arrad = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , lv_arr); lv1.setAdapter(arrad); // By using setTextFilterEnabled method in listview we can filter the listview items. lv1.setTextFilterEnabled(true); edt.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged( CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override public void beforeTextChanged( CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override public void afterTextChanged( Editable arg0) { // TODO Auto-generated method stub SearchListView.this.arrad.getFilter().filter(arg0); } }); } 

}

Si implementa Filterable en su adaptador, ListView puede controlar el filtrado .

Como otro enfoque, ListView mismo puede mostrar el texto que el usuario está introduciendo (en contraposición a utilizar un TextView independiente) mediante el manejo de los eventos onKeyUp, desplazando el ListView al elemento que tiene el texto introducido y subrayando ese texto en el Vista de la lista. Utilizo AsyncTask para implementar la búsqueda de texto de ListView y que resulta en un tipo conveniente adelante capacidad.

En esta página puedes encontrar algo que probablemente te ayude

http://thinkandroid.wordpress.com/2010/01/11/custom-cursoradapters/

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.