dimanche 1 mars 2015

position of checkbox get change after filter in listview

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