Hallo Ich habe eine Liste mit meinem benutzerdefinierten Adapter erstellt. Jede Zeile hat Kontrollkästchen, TextView, TextView. In meinem Adapter habe ich die Methode onCheckedChanged ovovided. Wenn ich Toast auf jeden Klick-Punkt überprüfe, funktioniert es wie es soll, aber wenn ich in der Hauptaktivität ausgewählte Elemente löschen möchte, lösche ich immer nur das letzte Element. Kann mir jemand einen Tipp geben? Hier ist mein Adapter CodeCheckBox onCheckedChanged funktioniert nicht richtig
public View getView(final int position, final View convertView, ViewGroup parent) {
View row = convertView;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(resource, parent, false);
holder = new RowBeanHolder();
holder.txtTitle=(TextView) row.findViewById(R.id.name);
holder.indicator=(TextView) row.findViewById(R.id.indicator);
holder.checkBox=(CheckBox) row.findViewById(R.id.checkBoxDelete);
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
ProductList element=(ProductList) holder.checkBox.getTag();
element.setSelected(isChecked);
//Toast.makeText(context,element.getSelected(),Toast.LENGTH_SHORT).show(); it show my current state
}
});
row.setTag(holder);
holder.checkBox.setTag(data.get(position));
}
else
{
holder = (RowBeanHolder)row.getTag();
((RowBeanHolder) row.getTag()).checkBox.setTag(data.get(position));
}
if(longPressed){
showCheckbox();
}
else{
hideCheckbox();
uncheck();
}
ProductList object = data.get(position);
holder.txtTitle.setText(object.getName());
holder.indicator.setText(object.getToBuy() + "/" + object.getBought());
holder.checkBox.setChecked(data.get(position).isSelected());
return row;
}
und meine Löschaktion
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()){
case R.id.action_delete:
for(ProductList p:items){
if(p.isSelected()) items.remove(p);
}
mode.finish();
return true;
default: return false;
}
}
auf diese Weise gebe ich Daten
adapter = new RowAdapter(context,R.layout.row,items);
listView.setAdapter(adapter);
buttonView. getTag(); Gibt das Objekt zurück, wenn ich zu int wechseln will: (int) buttonView.getTag(); App funktioniert nicht mehr –
vielleicht ist es null. Haben Sie den Tag für beide Fälle festgelegt? – Krish
Ja, wenn row == null holder.checkBox.setTag (position); und sonst ((RowBeanHolder) row.getTag()). checkBox.setTag (position); –