Skip to content

Instantly share code, notes, and snippets.

@reisub
Forked from rodrigohenriques/ClickToSelectEditText.java
Last active August 10, 2017 10:36
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save reisub/d81a6f5e4b47c8acabd4d0c7799052a4 to your computer and use it in GitHub Desktop.
Save reisub/d81a6f5e4b47c8acabd4d0c7799052a4 to your computer and use it in GitHub Desktop.
Used to make your EditText a better option than Spinners
public class ClickToSelectEditText<T extends Listable> extends AppCompatEditText {
List<T> items;
String[] listableItems;
CharSequence hint;
OnItemSelectedListener<T> onItemSelectedListener;
public ClickToSelectEditText(Context context) {
super(context);
hint = getHint();
}
public ClickToSelectEditText(Context context, AttributeSet attrs) {
super(context, attrs);
hint = getHint();
}
public ClickToSelectEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
hint = getHint();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
setFocusable(false);
setClickable(true);
setLongClickable(false);
}
public void setItems(List<T> items) {
this.items = items;
this.listableItems = new String[items.size()];
int i = 0;
for (T item : this.items) {
listableItems[i++] = item.getLabel();
}
configureOnClickListener();
}
private void configureOnClickListener() {
setOnClickListener(view -> {
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle(hint);
builder.setItems(listableItems, (dialogInterface, selectedIndex) -> {
setText(listableItems[selectedIndex]);
if (onItemSelectedListener != null) {
onItemSelectedListener.onItemSelectedListener(items.get(selectedIndex), selectedIndex);
}
});
builder.create().show();
});
}
public void setOnItemSelectedListener(OnItemSelectedListener<T> onItemSelectedListener) {
this.onItemSelectedListener = onItemSelectedListener;
}
public interface OnItemSelectedListener<T> {
void onItemSelectedListener(T item, int selectedIndex);
}
}
public interface Listable {
String getLabel();
}
@InjectView(R.id.signup_text_input_job_category)
ClickToSelectEditText<JobCategory> editTextJobCategory;
...
editTextJobCategory.setItems(jobCategories);
editTextJobCategory.setOnItemSelectedListener(new ClickToSelectEditText.OnItemSelectedListener<JobCategory>() {
@Override
public void onItemSelectedListener(JobCategory item, int selectedIndex) {
selectedJobCategory = item;
}
});
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.your.package.ClickToSelectEditText
android:id="@+id/signup_text_input_job_category"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_job_category" />
</android.support.design.widget.TextInputLayout>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment