¿Hay alguna manera de crear un filtro de búsqueda sobre mi vista de lista personalizada creada con BaseAdapter en lugar de ArrayAdapter, porque solo he encontrado métodos que usan ArrayAdapters en Custom Custom List Views. Follwing es lo que me he encontrado Making a filter using Array AdapterAndroid: ListView haciendo una búsqueda Filtro
Respuesta
Si está utilizando la colección de listas, extienda ArrayAdapter - es la subclase de BaseAdapter.
Anula el método getView (en tu caso solo copia el código getView anterior con pequeñas modificaciones).
Anulación toString del objeto que está en su colección y establece:
listView.setTextFilterEnabled(true);
Estoy haciendo esto ahora mismo 'clase FriendsListAdapter extiende BaseAdapter implementa Filterable' por favor dime ¿qué quieres decir con anular el BaseAdapter? – hassanadnan
Como escribí, sería mucho más simple anular ArrayAdapter: 'class FriendsListAdapter extiende ArrayAdapter
o agrega android: textFilterEnabled = "true" para ListView en el diseño – pawelzieba
ArrayAdapter es una clase hija de BaseAdapter.
El código fuente para ArrayAdapter es here. Échele un vistazo ..
Esto debería resolver su problema.
Aquí hay un ejemplo. Edita y usa lo que necesitas.
public class CustomListAdapter extends BaseAdapter {
private ArrayList<String> countryStringList;
private ArrayList<Integer> countryImageList;
private LayoutInflater mInFlater;
// private Bitmap mIcon1;
// private Bitmap mIcon2;
private int layoutID;
private Context context;
// private LayoutInflater mInflater;
public CustomListAdapter(Context context, int textViewResourceId,
ArrayList<String> stringObjects, ArrayList<Integer> imgObjects) {
super();
this.context = context;
countryStringList = stringObjects;
countryImageList = imgObjects;
layoutID = textViewResourceId;
mInFlater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
// return countryStringList.size();
return countryStringList.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 position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final ViewHolder holder;
if (convertView == null) {
convertView = mInFlater.inflate(layoutID, null);
holder = new ViewHolder();
holder.textCountryName = (TextView) convertView
.findViewById(R.id.txtSelectedCountryName);
holder.icon = (ImageView) convertView
.findViewById(R.id.imgSelectedCountryImage);
holder.textCountryPosition = (TextView) convertView
.findViewById(R.id.txtSelectedCountryPosition);
// holder.checkBoxListView=(CheckBox)convertView.findViewById(R.id.CheckBoxListView);
holder.relativeLayoutList = (RelativeLayout) convertView
.findViewById(R.id.relativeLayoutListItem);
holder.checkBoxListView = (CheckBox) convertView
.findViewById(R.id.checkBoxSelectedCountry);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
// holder=(ViewHolder)convertView.findViewById(R.id.TextViewIcon1)
}
holder.checkBoxListView.setTag(position);
holder.textCountryName.setText(countryStringList.get(position));
holder.textCountryPosition.setText(position + 1 + "/"
+ countryStringList.size());
holder.icon.setImageResource((countryImageList.get(position)));
if (ListViewController.checkStatusList.get(position).equalsIgnoreCase("present")) {
holder.checkBoxListView.setVisibility(View.VISIBLE);
} else {
holder.checkBoxListView.setVisibility(View.GONE);
}
/*
* holder.checkBoxListView.setOnCheckedChangeListener(new
* OnCheckedChangeListener(){
*
* @Override public void onCheckedChanged(CompoundButton buttonView,
* boolean isChecked) { // TODO Auto-generated method stub
*
* ListActivityImplementation listActivityImplementation = new
* ListActivityImplementation(); //show("Checkbox");
* ListActivityImplementation.countryStringList.remove(position);
* ListActivityImplementation.countryImageList.remove(position);
* ListActivityImplementation.lv.invalidateViews();
*
* //ListActivityImplementation.show("Checkbox"); }
*
* }) ;
*/
holder.textCountryName.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
holder.textCountryPosition.setText(position + 1 + "/"
+ countryStringList.size() + "clicked");
}
});
holder.checkBoxListView
.setOnCheckedChangeListener(new android.widget.CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
MathHelper.showToast(context, buttonView.getTag()
+ " clicked");
}
});
return convertView;
}
}
class ViewHolder {
TextView textCountryName;
ImageView icon;
TextView textCountryPosition;
RelativeLayout relativeLayoutList;
CheckBox checkBoxListView;
}
Gracias por esto, pero quiero que sepas cómo usar la interfaz Filterbale con el Adaptador Base, para que pueda filtrar la búsqueda en mi lista, vea – hassanadnan
Aquí se muestra un ejemplo de vista de lista creada con el adaptador de base. Busqué mucho pero no obtuve ninguna solución satisfactoria. Por lo tanto, pensé en subirlo para que en el futuro pudiera ayudar a otros.
Aquí está el código de history_container.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical">
<EditText android:layout_width="fill_parent" android:layout_height="wrap_content"
android:id="@+id/filter_text" />
<FrameLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:id="@+id/historyContainerLayout" />
</LinearLayout>
Aquí está el código de history_list_view.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content" android:gravity="left|center"
android:layout_width="wrap_content" android:paddingBottom="5px"
android:paddingTop="5px" android:paddingLeft="5px">
<TextView android:text="@+id/historytext" android:id="@+id/historytext"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="10px" android:textColor="#0099CC"/>
</LinearLayout>
Aquí está el código de history_schedule.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ScrollView android:id="@+id/scrollItemInfo"
android:layout_width="fill_parent" android:layout_height="1000dip">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<ListView android:id="@+id/historylist" android:layout_height="1000dip"
android:layout_width="fill_parent"/>
</LinearLayout>
</ScrollView>
</LinearLayout>
Disculpe, no puedo poner el código en el formato correcto. Parece que algo ha cambiado ya que no hay ninguna etiqueta que sea agradable. Pero para la comodidad del usuario, esta también es una buena idea para tener una pestaña. Quizás es mi culpa que no pueda publicar en el formato correcto. Y parece que no podemos publicar contenido de archivos xml ... Así que, piense cómo se habría diseñado el diseño.
El código de actividad es la siguiente: -
package com.testfilter;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewStub;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.TextView;
public class TestFilterListView extends Activity {
FrameLayout historyContainer;
ViewStub viewStub;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.history_container);
historyContainer = (FrameLayout) findViewById(R.id.historyContainerLayout);
EditText filterEditText = (EditText) findViewById(R.id.filter_text);
filterEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
historyContainer.removeAllViews();
final List<String> tempHistoryList = new ArrayList<String>();
tempHistoryList.addAll(historyList);
for(String data : historyList) {
if(data.indexOf((s.toString())) == -1) {
tempHistoryList.remove(data);
}
}
viewStub = new ViewStub(TestFilterListView.this, R.layout.history_schedule);
viewStub.setOnInflateListener(new ViewStub.OnInflateListener()
{
public void onInflate(ViewStub stub, View inflated)
{
setUIElements(inflated, tempHistoryList);
}
});
historyContainer.addView(viewStub);
viewStub.inflate();
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
setViewStub();
}
/********************************************************************************************************/
private void setViewStub()
{
historyList.add("first");
historyList.add("second");
historyList.add("third");
historyList.add("fourth");
historyList.add("fifth");
historyList.add("sixth");
historyList.add("seventh");
viewStub = new ViewStub(TestFilterListView.this, R.layout.history_schedule);
viewStub.setOnInflateListener(new ViewStub.OnInflateListener()
{
public void onInflate(ViewStub stub, View inflated)
{
setUIElements(inflated, historyList);
}
});
historyContainer.addView(viewStub);
viewStub.inflate();
}
/********************************************************************************************************/
final List<String> historyList = new ArrayList<String>();
String displayName = "";
ListView historyListView;
private void setUIElements(View v, List<String> historyLists)
{
if (v != null)
{
historyScheduleData.clear();
//historyList.clear();
historyScheduleData.addAll(historyLists);
historyListView = (ListView) findViewById(R.id.historylist);
historyListView.setAdapter(new BeatListAdapter(this));
registerForContextMenu(historyListView);
}
}
/********************************************************************************************************/
private static class BeatListAdapter extends BaseAdapter {
private LayoutInflater mInflater;
public BeatListAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return historyScheduleData.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.history_list_view, null);
holder = new ViewHolder();
holder.historyData = (TextView) convertView
.findViewById(R.id.historytext);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.historyData.setText(historyScheduleData.get(position));
return convertView;
}
static class ViewHolder {
TextView historyData;
}
}
private static final List<String> historyScheduleData = new ArrayList<String>();
}
aquí está la url donde puede ver mi blog [link] http://androidsearchfilterlistview.blogspot.com/ –
- 1. Filtro ListView para Android
- 2. Filtro para android ListView - Space Character
- 3. Diferencia entre búsqueda y filtro
- 4. Filtro de búsqueda para opencart
- 5. OnClick oyente a una imagen ListView - Android
- 6. Android lista de búsqueda mientras se escribe
- 7. Personalizar Android ListView Colors?
- 8. CheckBox elemento Haciendo ListView no se puede hacer clic
- 9. Android ListView Seleccionar animación
- 10. Haciendo una Barra de Progreso Skinny Customizada/barra de búsqueda
- 11. Haciendo una búsqueda binaria sobre algunos elementos en Haskell
- 12. Android Custom ArrayAdapter no se actualiza después del filtro
- 13. Implementar ListView en Android Widgets
- 14. jQuery búsqueda y tabla de filtro
- 15. Diferencia entre búsqueda y filtro en jquery
- 16. Android - ListView solo muestra el primer resultado
- 17. Android - MapView contenida dentro de una Listview
- 18. Android setbackgrounddrawable listview
- 19. Usando DN en el filtro de búsqueda
- 20. Django filtro() tipo de búsqueda de documentación
- 21. Programmatically Fling ListView Android
- 22. android ListView scrollbarStyle
- 23. ListView invertido en Android?
- 24. Android - ¿Filtro de intención?
- 25. Android ListView Selección Problema
- 26. Android ListView Live Updating
- 27. Android ListView Eliminar selección
- 28. android - índice para ListView?
- 29. Android ListView update con SimpleCursorAdapter
- 30. android checkable listview
Shoud que implementan la interfaz Filtrable en mi BaseAdapter? – hassanadnan
¿Qué estás usando, Cursor o Matriz u otra cosa? – pawelzieba
Estoy usando BaseAdapter – hassanadnan