dimanche 19 avril 2015

How to remove multiple items after checked using checkbox in listview using custom arrayadapter in android?

I have Listview with 1 checkbox and 2 labels. I used Custom ArrayAdapter class for Listview. I successfully deleted items from listview using checkbox checked, but problem is not proper delete multiple items.



public class MainActivity extends Activity {

ListView listView;
Button btnDelete;
ArrayList<String> items = new ArrayList<String>();
ArrayList<Integer> ids = new ArrayList<Integer>();
CustomAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

listView = (ListView) findViewById(R.id.listView1);
btnDelete = (Button) findViewById(R.id.btnDelete);

for (int i = 0; i < 20; i++) {
items.add("Chk " + i);
}

adapter = new CustomAdapter(MainActivity.this, R.layout.custome_list,
items);
listView.setAdapter(adapter);

btnDelete.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

if (ids.size() > 0) {
for (int i = 0; i < ids.size(); i++) {
items.remove(items.get(ids.get(i)));

}

adapter.notifyDataSetChanged();
}
}
});
}

public class CustomAdapter extends ArrayAdapter<String> {

List<String> items;
int resource;

public CustomAdapter(Context context, int resource, List<String> items) {
super(context, resource, items);
this.items = items;
this.resource = resource;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final int pos = position;
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater inflater = getLayoutInflater();

convertView = inflater.inflate(resource, null);

holder.chk = (CheckBox) convertView.findViewById(R.id.chk);
holder.txt = (TextView) convertView.findViewById(R.id.txt);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.txt.setText(items.get(position));

holder.chk
.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {

if (isChecked) {
ids.add(position);
System.out.println("IDS A: " + ids.toString());
} else {
if (ids.contains(position)) {
int i = ids.indexOf(position);
ids.remove(i);
System.out.println("IDS R: "
+ ids.toString());
}
}

}
});
return convertView;
}
}

public class ViewHolder {
CheckBox chk;
TextView txt;
}
}




Aucun commentaire:

Enregistrer un commentaire