Tengo ListView
. Cada fila contiene 3 TextView
y 2 Button
. Arriba tengo un EditText
. ¿Cómo puedo filtrar mi ListView
por el valor en el primer TextView
de cada fila?Buscar en ListView con EditText
Respuesta
crear alguna lista de arreglo de la vista de lista ..Y en "AddTextChangeListener" puede buscar similares elementos en la lista y cargar una nueva lista de arrays para th e buscado texto ...
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 utiliza 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 se puede basar en texview1/textview2 o textview3. Modifique el siguiente de acuerdo a sus necesidades.
public class MainActivity extends Activity {
ArrayList<NewData> mTemp=new ArrayList<NewData>();
ArrayList<NewData> mPostingData=new ArrayList<NewData>();
ArrayList< NewData> mOri = new ArrayList<NewData>();
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<NewData> 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<NewData>) 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<NewData> foundItems = new ArrayList<NewData>();
if(mTemp!=null)
{
for(int i=0;i<mTemp.size();i++)
{
if (mTemp.get(i).newDatacus.get(NewData.TAG_CUSTOMER_CODE).toString().contains(constraint)) {
System.out.println("My datas"+mTemp.get(i).newDatacus.get(NewData.TAG_CUSTOMER_CODE).toString());
foundItems.add(mTemp.get(i));
}
else
{
}
}
}
result.count = foundItems.size();//search results found return count
result.values = foundItems;// return values
}
else
{
result.count=-1;// no search results found
}
return result;
}
};
}
public Myadapter(Context context) {
super(context, 0);
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// TODO Auto-generated constructor stub
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mPostingData.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if(mOri == null){
return null;
}
// When convertView is not null, we can reuse it directly, there is no need
// to reinflate it. We only inflate a new View when the convertView supplied
// by ListView is null.
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list, null);
convertView.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
// Creates a ViewHolder and store references to the two children views
// we want to bind data to.
holder = new ViewHolder();
holder.t1=(TextView) convertView.findViewById(R.id.textView1);
holder.t2 = (TextView) convertView.findViewById(R.id.textView2);
holder.t3 = (TextView) convertView.findViewById(R.id.textView3);
convertView.setTag(holder);
} else {
// Get the ViewHolder back to get fast access to the TextView
// and the ImageView.
holder = (ViewHolder) convertView.getTag();
}
holder.t1.setText(mPostingData.get(position).newDatacus.get(NewData.TAG_CUSTOMER_CODE).toString());
holder.t2.setText(mPostingData.get(position).newDatacus.get(NewData.TAG_CUSTOMER_NAME).toString());
holder.t3.setText(mPostingData.get(position).newDatacus.get(NewData.TAG_CUSTOMER_MOBILE).toString());
return convertView;
}
}
class ViewHolder
{
TextView t1,t2,t3;
}
Main.xml
<?xml version="1.0" encoding="utf-8"?>
<EditText
android:id="@+id/search"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
list.xml // xml para inflar
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:text="TextView" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:text="TextView" />
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());
}
}
intente con el código anterior y modifique según corresponda – Raghunandan
- 1. Edittext en Listview android
- 2. Android: EditText en ListView
- 3. EditText en ListView con windowSoftInputMode adjustPan
- 4. EditText pierde contenido en desplazamiento en ListView
- 5. Cómo filtrar ListView a través de EditText
- 6. Android: ¿EditText pierde contenido en desplazamiento en ListView?
- 7. EditText en ListView sin la entrada de reciclaje
- 8. ListView, SimpleCursorAdapter, un filtro EditText - ¿por qué no hará nada?
- 9. EditText dentro de ListView no se mantendrá enfocado
- 10. ListView con widget seleccionable/editable
- 11. Android ListView update con SimpleCursorAdapter
- 12. EditText setText() establece el texto en varias vistas de EditText
- 13. ExpandableListView con un EditText
- 14. Ejecución Autocompletar con ListView en Android
- 15. Filtrado ListView con adaptador personalizado (objeto)
- 16. ¿Cómo puedo filtrar los datos ListView al escribir en EditText en android
- 17. ¿Cómo agregar EditText en listview y obtener su valor de forma dinámica en todas las filas?
- 18. ListView con Alphabet en Android
- 19. SoftKeyboard ocultar EditText
- 20. Filtro ListView para Android
- 21. Filter ListView con arrayadapter
- 22. Buggy ListView me pone triste
- 23. Cómo restablecer el ListView con el ArrayAdapter después de ir a buscar los datos
- 24. setHintTextColor() en EditText
- 25. Cómo mostrar "Sin resultados" en ListView filtrable?
- 26. Recursos $ NotFoundException en ListView
- 27. listview con encabezado y pie de página
- 28. EditText OnKeyDown
- 29. Multiple Choice Searchable ListView
- 30. EditText con lista de sugerencias debajo de
http://samir-mangroliya.blogspot.in/2012/05/android-sectioned-listview-with-search_6865.html –
Compruebe esto: [-search Android listview] (http://stackoverflow.com/a/5180156/379693) –
cambie "serach" a "buscar" para una mejor referencia – Tschegewara