Ich bin mit diesem Problem konfrontiert, das ist, wenn ich ein Element überprüft und ich suche den Namen danach, das Kontrollkästchen wird deaktiviert.Benutzerdefinierte Adapter Kontrollkästchen nicht bei der Suche aktiviert
Ich habe auf Heather
es deaktiviert ist, nachdem ich
Wie kann ich, dass die Gegenstände überprüft werden, noch gewährleisten zu suchen, nachdem ich suchen?
CustomAdapter.java
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class CustomAdapter extends ArrayAdapter<Contact> implements Filterable {
private final Activity context;
private ArrayList<Contact> contacts;
ArrayList<Contact> stringFilterList;
ValueFilter valueFilter;
private static class ViewHolder {
TextView name;
TextView phoneno;
CheckBox checkBox;
ImageView photo;
}
public CustomAdapter(Activity context, ArrayList<Contact> contacts) {
super(context, R.layout.custom, contacts);
//super(context, R.layout.custom, contacts);
this.context = context;
this.contacts = contacts;
this.stringFilterList = contacts;
}
@Override
public int getCount() {
return contacts.size();
}
/*@Override
public String getItem(int position) {
return contacts.get(position).getName();
}
@Override
public long getItemId(int position) {
return contacts.indexOf(getItem(position));
}*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = context.getLayoutInflater();
convertView = inflater.inflate(R.layout.custom, null);
viewHolder = new ViewHolder();
viewHolder.name = (TextView) convertView.findViewById(R.id.name);
viewHolder.phoneno = (TextView) convertView.findViewById(R.id.phoneno);
viewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);
viewHolder.photo = (ImageView) convertView.findViewById(R.id.photo);
viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag.
contacts.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state.
//stringFilterList.get(getPosition).setSelected(buttonView.isChecked());
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.name, viewHolder.name);
convertView.setTag(R.id.phoneno, viewHolder.phoneno);
convertView.setTag(R.id.photo, viewHolder.photo);
convertView.setTag(R.id.checkBox, viewHolder.checkBox);
}
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.checkBox.setTag(position); // This line is important.
viewHolder.name.setText(contacts.get(position).getName());
viewHolder.phoneno.setText(contacts.get(position).getPhoneNo());
viewHolder.photo.setImageResource(R.drawable.photo);
viewHolder.checkBox.setChecked(contacts.get(position).isSelected());
return convertView;
}
@Override
public Filter getFilter() {
if (valueFilter == null) {
valueFilter = new ValueFilter();
}
return valueFilter;
}
private class ValueFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null && constraint.length() > 0) {
ArrayList<Contact> filterList = new ArrayList<Contact>();
for (int i = 0; i < stringFilterList.size(); i++) {
if ((stringFilterList.get(i).getName().toUpperCase()).contains(constraint.toString().toUpperCase())) {
Contact contact = new Contact(stringFilterList.get(i).getName(), stringFilterList.get(i).getPhoneNo());
filterList.add(contact);
}
}
results.count = filterList.size();
results.values = filterList;
} else {
results.count = stringFilterList.size();
results.values = stringFilterList;
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
contacts = (ArrayList<Contact>) results.values;
notifyDataSetChanged();
}
}
}
Sie liefern neue Kontaktliste während notifyDataSetChanged, so ist es nicht überprüfen. Kontakt contact = new Kontakt (stringFilterList.get (i) .getName(), stringFilterList.get (i) .getPhoneNo()); Hier liefern Sie Name und Telefonnummer, isAusgewählt hat den Standardwert false –
in 'performFiltering' anstelle der Initialisierung neuer' Contact' übergeben Sie Ihren Kontakt mit Position wie: 'filterList.add (contacts.get (i))' –