package org.intermine.app.adapter;
/*
* Copyright (C) 2015 InterMine
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. See the LICENSE file for more
* information or http://www.gnu.org/copyleft/lesser.html.
*
*/
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import org.intermine.app.R;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import butterknife.ButterKnife;
/**
* @author Daria Komkova <Daria_Komkova @ hotmail.com>
*/
public class MultiValueListAdapter extends RecyclerView.Adapter<MultiValueListAdapter.ViewHolder> {
private List<String> mValues;
private Set<String> mSelected;
public MultiValueListAdapter(Collection<String> values) {
mValues = new ArrayList<>(values);
mSelected = new HashSet<>();
}
@Override
public MultiValueListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
View view = LayoutInflater.from(context).inflate(R.layout.checkbox_list_item, parent, false);
return ViewHolder.newInstance(view);
}
@Override
public void onBindViewHolder(MultiValueListAdapter.ViewHolder holder, final int position) {
holder.mValue.setText(mValues.get(position));
holder.mCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
String value = mValues.get(position);
if (isChecked) {
mSelected.add(value);
} else {
mSelected.remove(value);
}
}
});
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemCount() {
return mValues.size();
}
public Set<String> getSelected() {
return mSelected;
}
public static final class ViewHolder extends RecyclerView.ViewHolder {
private final View mParent;
private final TextView mValue;
private final CheckBox mCheckbox;
public static ViewHolder newInstance(View parent) {
TextView value = (TextView) parent.findViewById(R.id.value);
CheckBox checkBox = ButterKnife.findById(parent, R.id.checkbox);
return new ViewHolder(parent, value, checkBox);
}
private ViewHolder(View parent, TextView value, CheckBox checkBox) {
super(parent);
this.mParent = parent;
this.mValue = value;
this.mCheckbox = checkBox;
}
public void setOnClickListener(View.OnClickListener listener) {
mParent.setOnClickListener(listener);
}
}
}