package com.code44.finance.adapters; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Checkable; import android.widget.TextView; import com.code44.finance.R; import com.code44.finance.common.utils.Preconditions; import com.code44.finance.ui.dialogs.ListDialogFragment; import java.util.ArrayList; import java.util.List; public class ListDialogAdapter extends BaseAdapter { private final Context context; private final List<ListDialogFragment.ListDialogItem> items; public ListDialogAdapter(Context context, List<ListDialogFragment.ListDialogItem> items) { Preconditions.notNull(context, "Context cannot be null."); Preconditions.notNull(items, "Items cannot be null."); this.context = context; this.items = items; } @Override public int getCount() { return items.size(); } @Override public Object getItem(int position) { return items.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { convertView = newView(context, parent); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } final ListDialogFragment.ListDialogItem item = items.get(position); bindView(holder, item); return convertView; } protected View newView(Context context, ViewGroup parent) { final int layoutResId; if (isMultipleChoice()) { layoutResId = R.layout.li_dialog_multiple_choice; } else if (isSelectable()) { layoutResId = R.layout.li_dialog_single_choice; } else { layoutResId = R.layout.li_dialog_simple; } return LayoutInflater.from(context).inflate(layoutResId, parent, false); } protected void bindView(ViewHolder holder, ListDialogFragment.ListDialogItem item) { holder.title_TV.setText(item.getTitle()); if (isSelectable()) { final ListDialogFragment.SingleChoiceListDialogItem singleChoiceItem = (ListDialogFragment.SingleChoiceListDialogItem) item; ((Checkable) holder.title_TV).setChecked(singleChoiceItem.isSelected()); } } public void onPositionClicked(int position) { if (isSelectable()) { ListDialogFragment.SingleChoiceListDialogItem selectableItem = (ListDialogFragment.SingleChoiceListDialogItem) items.get(position); if (isMultipleChoice()) { selectableItem.setSelected(!selectableItem.isSelected()); } else if (!selectableItem.isSelected()) { for (ListDialogFragment.ListDialogItem item : items) { ((ListDialogFragment.SingleChoiceListDialogItem) item).setSelected(false); } selectableItem.setSelected(true); } notifyDataSetChanged(); } } public List<Integer> getSelectedPositions() { final List<Integer> selectedPositions = new ArrayList<>(); if (items.size() > 0 && items.get(0) instanceof ListDialogFragment.SingleChoiceListDialogItem) { for (int i = 0, size = items.size(); i < size; i++) { if (((ListDialogFragment.SingleChoiceListDialogItem) items.get(0)).isSelected()) { selectedPositions.add(i); } } } return selectedPositions; } private boolean isSelectable() { return items.get(0) instanceof ListDialogFragment.SingleChoiceListDialogItem; } private boolean isMultipleChoice() { return items.get(0) instanceof ListDialogFragment.MultipleChoiceListDialogItem; } protected static class ViewHolder { public final TextView title_TV; public ViewHolder(View view) { title_TV = (TextView) view.findViewById(R.id.titleTextView); } } }