Try the following:
public class AccountListAdapter extends BaseAdapter { @SuppressWarnings("unused") private final static String TAG = AccountListAdapter.class.getSimpleName(); private Context context; private List<Account> rowItems; private int selectedItemCounter = 0; private final int limit; public AccountListAdapter(Context context, List<Account> items, int limit) { this.context = context; this.rowItems = items; this.limit = limit; } public View getView(final int position, View convertView, ViewGroup parent) { LayoutInflater mInflater = (LayoutInflater) context .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); final Account rowItem = (Account) getItem(position); convertView = mInflater.inflate(R.layout.account_selection_item, null); TextView tv = (TextView) convertView.findViewById(R.id.textView); ToggleButton tb = (ToggleButton) convertView .findViewById(R.id.toggleButton); tb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked && !rowItem.isSelected()) { if (selectedItemCounter >= limit) { Toast.makeText(context, "can't be more" + selectedItemCounter, Toast.LENGTH_SHORT).show(); buttonView.setChecked(false); return; } rowItem.setSelected(true); selectedItemCounter++; } else if (!isChecked && rowItem.isSelected()) { rowItem.setSelected(false); selectedItemCounter--; } } }); tv.setText(rowItem.getDevId()); tb.setChecked(rowItem.isSelected()); return convertView; } @Override public int getCount() { return rowItems.size(); } @Override public Object getItem(int position) { return rowItems.get(position); } @Override public long getItemId(int position) { return rowItems.indexOf(getItem(position)); } }
tried to improve my code using ViewHolder template but failed. if anyone has a better idea please let me know.
source share