Buscar en ListView con EditText

Tengo un ListView . Cada fila contiene 3 TextView y 2 Button ‘s. Sobre esto tengo un EditText . ¿Cómo puedo filtrar mi ListView por el valor en la primera TextView de cada fila?

Sigue el link

http://marakana.com/forums/android/learning_android_book/617.html

http://androidsearchfilterlistview.blogspot.in/2011/06/android-custom-list-view-filter.html

¿Cómo puedo filtrar los datos de ListView al escribir en EditText en Android

Cómo actualizar dinámicamente un ListView en Android

cree una lista de arreglos para la vista de lista … Y en “AddTextChangeListener” puede buscar elementos similares en la lista y cargar una nueva lista de arrays para el texto buscado …

 edittext.addTextChangedListener(new TextWatcher(){ public void afterTextChanged(Editable s) { //search for the keyword and add the items to a new arraylist } 

El siguiente código usa un adaptador de lista personalizado.

Tengo 3 vistas de texto mostradas usando un adaptador de lista personalizado. Hice una muestra que realiza una búsqueda basada en la entrada en editext en la parte superior de la lista. En base a la comparación de entrada, se realiza con datos en textview1 de cada fila y los datos se filtran y se muestran en consecuencia.

Puede tener otros elementos en la fila de vista de lista y la búsqueda puede basarse en texview1 / textview2 o textview3. Modifique el siguiente de acuerdo a sus necesidades.

 public class MainActivity extends Activity { ArrayList mTemp=new ArrayList(); ArrayList mPostingData=new ArrayList(); ArrayList< NewData> mOri = new ArrayList(); Myadapter ma; EditText search; NewData nd; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); for(int i = 0; i < 20; i++) { nd=new NewData(); nd.newDatacus.put(NewData.TAG_CUSTOMER_CODE, "i"+i); nd.newDatacus.put(NewData.TAG_CUSTOMER_NAME, "a"+i); nd.newDatacus.put(NewData.TAG_CUSTOMER_MOBILE, "number"); nd.newDatacus.put(NewData.TAG_CUSTOMER_ADDRESS, "address"); mOri.add(nd); } ma= new Myadapter(MainActivity.this); mPostingData=mOri; mTemp=mOri; ListView lv= (ListView) findViewById(R.id.list); lv.setAdapter(ma); search= (EditText) findViewById(R.id.search); search.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { ma.getFilter().filter(s); ma.notifyDataSetChanged(); } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void afterTextChanged(Editable s) { } }); } class Myadapter extends ArrayAdapter { LayoutInflater mInflater; public void setData(ArrayList mPpst) { mPostingData = mPpst;//contains class items data. } @Override public Filter getFilter() { return new Filter() { @Override protected void publishResults(CharSequence constraint, FilterResults results) { if (results != null && results.count >= 0) { setData((ArrayList) results.values);//if results of search is null set the searched results data } else { setData(mOri);// set original values } notifyDataSetInvalidated(); } @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults result = new FilterResults(); if (!TextUtils.isEmpty(constraint)) { constraint = constraint.toString().toLowerCase(); ArrayList foundItems = new ArrayList(); if(mTemp!=null) { for(int i=0;i 

Main.xml

  

   

List.xml // xml para inflar

    

Clase NewData

  public class NewData { public static final String TAG_CUSTOMER_CODE = "customer_code"; public static final String TAG_CUSTOMER_NAME = "customer_name"; public static final String TAG_CUSTOMER_MOBILE = "customer_mobile"; public static final String TAG_CUSTOMER_ADDRESS = "customer_address"; Hashtable newDatacus=new Hashtable(); public NewData() { newDatacus.put(NewData.TAG_CUSTOMER_CODE,new String()); newDatacus.put(NewData.TAG_CUSTOMER_ADDRESS,new String()); newDatacus.put(NewData.TAG_CUSTOMER_NAME,new String()); newDatacus.put(NewData.TAG_CUSTOMER_MOBILE,new String()); newDatacus.put(NewData.TAG_CUSTOMER_ADDRESS,new String()); } }