private class CustomAdapterProductos extends ArrayAdapter> {
boolean[] checkBoxState;
ArrayList<HashMap<String, String>> data_original;
ArrayList<HashMap<String, String>> data_filter;
; ViewHolder viewHolder ;
ProductosFilter filter_;
public CustomAdapterProductos(Context context, int textViewResourceId, ArrayList<HashMap<String, String>> productos_) {
super(context, textViewResourceId, productos_);
this.data_original=new ArrayList<HashMap<String, String>>();
this.data_original.addAll(productos_);
this.data_filter = new ArrayList<HashMap<String, String>>();
this.data_filter.addAll(productos_);
this.checkBoxState = new boolean[productos_.size()];
}
@Override
public Filter getFilter() {
if (filter_ == null){
filter_ = new ProductosFilter();
}
return filter_;
}
private class ViewHolder {
TextView nombre, descripcion, tipo;
CheckBox checkBox;
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item, null);
viewHolder = new ViewHolder();
viewHolder.nombre = (TextView) convertView.findViewById(R.id.pname);
viewHolder.tipo = (TextView) convertView.findViewById(R.id.pnomtipo);
viewHolder.descripcion = (TextView) convertView.findViewById(R.id.pdescrip);
viewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox_p);
convertView.setTag(viewHolder);
} else
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.nombre.setText(data_filter.get(position).get(TAG_NAME).toString());
viewHolder.descripcion.setText(data_filter.get(position).get(TAG_DESC).toString());
viewHolder.tipo.setText(data_filter.get(position).get("nombre_tipo").toString());
viewHolder.checkBox.setChecked(checkBoxState[position]);
viewHolder.checkBox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (((CheckBox) v).isChecked())
checkBoxState[position] = true;
else
checkBoxState[position] = false;
}
});
return convertView;
}
private class ProductosFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults result = new FilterResults();
if(constraint != null && constraint.toString().length() > 0) {
ArrayList<HashMap<String, String>> filteredItems = new ArrayList<HashMap<String, String>>();
for(int i = 0, l =data_original.size() ;i < l; i++)
{
String va=data_original.get(i).get(TAG_NAME);
if(va.toLowerCase().contains(constraint)){
filteredItems.add(data_original.get(i));
}
}
result.count = filteredItems.size();
result.values = filteredItems;
}else{
synchronized(this)
{
result.values = data_original;
result.count = data_original.size();
}
}
return result;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
data_filter= (ArrayList<HashMap<String,String>>)results.values;
notifyDataSetChanged();
clear();
for(int i=0, l=data_filter.size();i<l;i++){
add(data_filter.get(i));
notifyDataSetInvalidated();}
}
}
}
If I do a search in the filter and found 3 results and select the position 2, when I remove the filter listview original position 2 is selected ..
Aucun commentaire:
Enregistrer un commentaire