package com.mikepenz.fastadapter.app.items; import android.support.annotation.NonNull; import android.support.annotation.StringRes; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.RadioButton; import android.widget.TextView; import com.mikepenz.fastadapter.FastAdapter; import com.mikepenz.fastadapter.app.R; import com.mikepenz.fastadapter.items.AbstractItem; import com.mikepenz.fastadapter.listeners.ClickEventHook; import com.mikepenz.materialdrawer.holder.StringHolder; import java.util.List; import java.util.Set; import butterknife.BindView; import butterknife.ButterKnife; /** * Created by mikepenz on 28.12.15. */ public class RadioButtonSampleItem extends AbstractItem<RadioButtonSampleItem, RadioButtonSampleItem.ViewHolder> { public String header; public StringHolder name; public StringHolder description; public RadioButtonSampleItem withHeader(String header) { this.header = header; return this; } public RadioButtonSampleItem withName(String Name) { this.name = new StringHolder(Name); return this; } public RadioButtonSampleItem withName(@StringRes int NameRes) { this.name = new StringHolder(NameRes); return this; } public RadioButtonSampleItem withDescription(String description) { this.description = new StringHolder(description); return this; } public RadioButtonSampleItem withDescription(@StringRes int descriptionRes) { this.description = new StringHolder(descriptionRes); return this; } /** * defines the type defining this item. must be unique. preferably an id * * @return the type */ @Override public int getType() { return R.id.fastadapter_radiobutton_sample_item_id; } /** * defines the layout which will be used for this item in the list * * @return the layout for this item */ @Override public int getLayoutRes() { return R.layout.radiobutton_sample_item; } /** * binds the data of this item onto the viewHolder * * @param viewHolder the viewHolder of this item */ @Override public void bindView(ViewHolder viewHolder, List<Object> payloads) { super.bindView(viewHolder, payloads); viewHolder.radioButton.setChecked(isSelected()); //set the text for the name StringHolder.applyTo(name, viewHolder.name); //set the text for the description or hide StringHolder.applyToOrHide(description, viewHolder.description); } @Override public void unbindView(ViewHolder holder) { super.unbindView(holder); holder.name.setText(null); holder.description.setText(null); } @Override public ViewHolder getViewHolder(View v) { return new ViewHolder(v); } /** * our ViewHolder */ public static class ViewHolder extends RecyclerView.ViewHolder { protected View view; @BindView(R.id.radiobutton) public RadioButton radioButton; @BindView(R.id.material_drawer_name) TextView name; @BindView(R.id.material_drawer_description) TextView description; public ViewHolder(View view) { super(view); ButterKnife.bind(this, view); this.view = view; } } public static class RadioButtonClickEvent extends ClickEventHook<RadioButtonSampleItem> { @Override public View onBind(@NonNull RecyclerView.ViewHolder viewHolder) { if (viewHolder instanceof RadioButtonSampleItem.ViewHolder) { return ((ViewHolder) viewHolder).radioButton; } return null; } @Override public void onClick(View v, int position, FastAdapter<RadioButtonSampleItem> fastAdapter, RadioButtonSampleItem item) { if (!item.isSelected()) { Set<Integer> selections = fastAdapter.getSelections(); if (!selections.isEmpty()) { int selectedPosition = selections.iterator().next(); fastAdapter.deselect(); fastAdapter.notifyItemChanged(selectedPosition); } fastAdapter.select(position); } } } }