package uk.org.smithfamily.mslogger.log; import java.util.ArrayList; import java.util.List; import uk.org.smithfamily.mslogger.R; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.TextView; /** * Custom adapter which have two rows (datalog name and datalog size) + a checkbox */ public class DatalogRowAdapter extends BaseAdapter { private DatalogRowAdapterCallback callback; private List<DatalogRow> datalogRows; private LayoutInflater mInflater; public DatalogRowAdapter(Context context, ArrayList<DatalogRow> results) { datalogRows = results; mInflater = LayoutInflater.from(context); } public void clear() { datalogRows.clear(); } @Override public int getCount() { return datalogRows.size(); } @Override public Object getItem(int position) { return datalogRows.get(position); } @Override public long getItemId(int position) { return position; } public boolean isItemSelected(int position) { return datalogRows.get(position).isSelected(); } public List<DatalogRow> getAllSelected() { List<DatalogRow> selectedRows = new ArrayList<DatalogRow>(); for (DatalogRow datalogRow : datalogRows) { if (datalogRow.isSelected()) { selectedRows.add(datalogRow); } } return selectedRows; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.viewdatalog_row, null); holder = new ViewHolder(); holder.txtDatalogName = (TextView) convertView.findViewById(R.id.datalog_name); holder.txtDatalogSize = (TextView) convertView.findViewById(R.id.datalog_size); holder.chkSelected = (CheckBox) convertView.findViewById(R.id.selected); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.chkSelected.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { datalogRows.get(position).setSelected(isChecked); callback.onDatalogSelected(); } }); convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { CheckBox selected = (CheckBox) v.findViewById(R.id.selected); selected.setChecked(!selected.isChecked()); datalogRows.get(position).setSelected(selected.isChecked()); callback.onDatalogSelected(); } }); holder.txtDatalogName.setText(datalogRows.get(position).getDatalogName()); holder.txtDatalogSize.setText(datalogRows.get(position).getDatalogSize()); holder.chkSelected.setChecked(datalogRows.get(position).isSelected()); return convertView; } public void setCallback(DatalogRowAdapterCallback callback) { this.callback = callback; } class ViewHolder { TextView txtDatalogName; TextView txtDatalogSize; CheckBox chkSelected; } }