package pct.droid.widget; import android.content.Context; import android.content.DialogInterface; import android.content.res.TypedArray; import android.support.v4.app.FragmentManager; import android.text.TextUtils; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import butterknife.ButterKnife; import butterknife.Bind; import pct.droid.R; import pct.droid.base.fragments.dialog.StringArraySelectorDialogFragment; public class OptionSelector extends LinearLayout { View mView; @Bind(android.R.id.text1) TextView mText; @Bind(android.R.id.icon) ImageView mIcon; private FragmentManager mFragmentManager; private String[] mData = new String[0]; private int mDefaultOption = -1, mTitle; private SelectorListener mListener; public OptionSelector(Context context) { super(context); } public OptionSelector(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs, android.R.style.Widget_Button); } public OptionSelector(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context, attrs, defStyle); } public void init(Context context, AttributeSet attrs, int defStyle) { setClickable(true); setFocusable(true); LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mView = layoutInflater.inflate(R.layout.optionselector, this); ButterKnife.bind(this, mView); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.OptionSelector, defStyle, 0); String str = a.getString(R.styleable.OptionSelector_optionText); if (!TextUtils.isEmpty(str)) { mText.setText(str); setContentDescription(str); } int res = a.getResourceId(R.styleable.OptionSelector_optionIcon, R.mipmap.ic_launcher); mIcon.setImageResource(res); setOnClickListener(mOnClickListener); a.recycle(); } public void setText(String str) { mText.setText(str); } public void setText(int strRes) { mText.setText(strRes); } public void setTitle(int strRes) { mTitle = strRes; } public void setIcon(int iconRes) { mIcon.setImageResource(iconRes); } public void setListener(SelectorListener listener) { mListener = listener; } public void setFragmentManager(FragmentManager fragmentManager) { mFragmentManager = fragmentManager; } public void setData(String[] data) { mData = data; } public void setDefault(int defaultOption) { mDefaultOption = defaultOption; } OnClickListener mOnClickListener = new OnClickListener() { @Override public void onClick(View v) { if (mFragmentManager == null) return; StringArraySelectorDialogFragment.showSingleChoice(mFragmentManager, mTitle, mData, mDefaultOption, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int position) { if (mListener != null) mListener.onSelectionChanged(position, mData[position]); mDefaultOption = position; setText(mData[position]); dialog.dismiss(); } } ); } }; public interface SelectorListener { public void onSelectionChanged(int position, String value); } }