J'essaie d'implémenter le filtrage d'un ListView qui utilise un adaptateur d'objet personnalisé, mais je ne trouve aucun échantillon utile. Le code inclus est très simplifié, donc non- gardez à l'esprit que je ne peux pas utiliser un ArrayAdapter standard. J'ai un EditText au-dessus du ListView, et quand l'utilisateur entre le texte dans le widget EditText je voudrais filtrer le ListView par le texte écrit dans le EditText. Toutes les suggestions seraient grandement appréciées!Filtrage ListView avec adaptateur (objet) personnalisé
Voici l'extrait de la classe d'activité:
public class management_objects extends Activity {
private static List<User> UserList;
private EfficientAdapter adapter = null;
private ListView objectListView = null;
private EditText SearchText = null;
private static class EfficientAdapter extends BaseAdapter implements Filterable{
private LayoutInflater mInflater;
public EfficientAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return UserList.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.imagelayout_2lines, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.managementObjectText);
holder.subtext = (TextView) convertView.findViewById(R.id.managementObjectSubText);
holder.icon = (ImageView) convertView.findViewById(R.id.managementObjectIcon);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(UserList.get(position).getFirstName());
holder.subtext.setText(UserList.get(position).getLastName());
holder.icon.setImageResource(R.drawable.user);
return convertView;
}
static class ViewHolder {
TextView text;
TextView subtext;
ImageView icon;
}
@Override
public Filter getFilter() {
return null;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.adobjectlist);
Bundle extras = getIntent().getExtras();
SearchText = (EditText) findViewById(R.id.SearchBox);
SearchText.addTextChangedListener(filterTextWatcher);
objectListView = (ListView) findViewById(R.id.ObjectList);
objectListView.setOnItemClickListener(Item_Click);
adapter = new EfficientAdapter(this);
ComputerName = extras.getString("COMPUTER_NAME");
//Get User list from webservice
ShowUsers();
}
Voici la classe User:
public class User {
private int UserId;
private String FirstName;
private String LastName;
public int getUserId() {
return UserId;
}
public void setUserId(int UserId) {
this.UserId = UserId;
}
public String getFirstName() {
return FirstName;
}
public void setFirstName(String FirstName) {
this.FirstName = FirstName;
}
public String getLastName() {
return LastName;
}
public void setLastName(String LastName) {
this.LastName = LastName;
}
}
Pourquoi dites-vous "override" dans 3)? BaseAdapter n'a pas getFilter(). – Ixx
Bonne prise - pas nécessaire. Ma classe Adapter personnalisée (héritant en réalité de AmazingAdapter du widget Open Source AmazingListView) implémente l'interface android.widget.Filterable qui requiert getFilter(). – DustinB
[Ce tutoriel] (http://www.survivingwithandroid.com/2012/10/android-listview-custom-filter-and.html) m'a aidé. La réponse avait des choses peu claires, ou peut-être que je ne l'ai pas lu avec suffisamment de concentration. – Sufian