package com.afollestad.materialdialogssample; import android.annotation.SuppressLint; import android.content.Context; import android.support.annotation.ArrayRes; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; /** Simple adapter example for custom items in the dialog */ class ButtonItemAdapter extends RecyclerView.Adapter<ButtonItemAdapter.ButtonVH> { private final CharSequence[] items; private ItemCallback itemCallback; private ButtonCallback buttonCallback; ButtonItemAdapter(Context context, @ArrayRes int arrayResId) { this(context.getResources().getTextArray(arrayResId)); } private ButtonItemAdapter(CharSequence[] items) { this.items = items; } void setCallbacks(ItemCallback itemCallback, ButtonCallback buttonCallback) { this.itemCallback = itemCallback; this.buttonCallback = buttonCallback; } @Override public ButtonVH onCreateViewHolder(ViewGroup parent, int viewType) { final View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.dialog_customlistitem, parent, false); return new ButtonVH(view, this); } @SuppressLint("SetTextI18n") @Override public void onBindViewHolder(ButtonVH holder, int position) { holder.title.setText(items[position] + " (" + position + ")"); holder.button.setTag(position); } @Override public int getItemCount() { return items.length; } interface ItemCallback { void onItemClicked(int itemIndex); } interface ButtonCallback { void onButtonClicked(int buttonIndex); } static class ButtonVH extends RecyclerView.ViewHolder implements View.OnClickListener { final TextView title; final Button button; final ButtonItemAdapter adapter; ButtonVH(View itemView, ButtonItemAdapter adapter) { super(itemView); title = (TextView) itemView.findViewById(R.id.md_title); button = (Button) itemView.findViewById(R.id.md_button); this.adapter = adapter; itemView.setOnClickListener(this); button.setOnClickListener(this); } @Override public void onClick(View view) { if (adapter.itemCallback == null) { return; } if (view instanceof Button) { adapter.buttonCallback.onButtonClicked(getAdapterPosition()); } else { adapter.itemCallback.onItemClicked(getAdapterPosition()); } } } }