Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

My fix for bugs with empty data, focus, setText and setSelected/getSelected feature #88

Open
PiotrekMRMobi opened this issue Oct 18, 2017 · 0 comments

Comments

@PiotrekMRMobi
Copy link

PiotrekMRMobi commented Oct 18, 2017

public class CustomSpinner extends MaterialBetterSpinner {

    @Nullable private OnDismissListener onDismissListener;
    @Nullable private AdapterView.OnItemClickListener onItemClickListener;
    private int selectedPosition = -1;

    public CustomSpinner(Context context) {
        super(context);
        init();
    }

    public CustomSpinner(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
        init();
    }

    public CustomSpinner(Context context, AttributeSet attributeSet, int arg2) {
        super(context, attributeSet, arg2);
        init();
    }

    private void init() {
        super.setOnDismissListener(() -> {
            clearFocus();
            if (onDismissListener != null) {
                onDismissListener.onDismiss();
            }
        });
        super.setOnItemClickListener((parent, view, position, id) -> {
            selectedPosition = position;
            if (onItemClickListener != null) {
                onItemClickListener.onItemClick(parent, view, position, id);
            }
        });
    }

    @Override
    public void setOnDismissListener(OnDismissListener dismissListener) {
        this.onDismissListener = dismissListener;
    }

    @Override
    public void setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    public int getSelectedPosition() {
        return selectedPosition;
    }

    public void setSelectedPosition(int position) {
        selectedPosition = position;
        ListAdapter adapter = getAdapter();
        if (adapter == null) {
            setText("");
            return;
        }
        Object object = getAdapter().getItem(position);
        setText(object == null ? "" : object.toString());
    }

    @Override
    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
       //Fix for setText() and disappearing items
    }

    @Nullable
    public Object getSelectedItem() {
        if (selectedPosition < 0) {
            return null;
        }
        ListAdapter adapter = getAdapter();
        if (adapter == null) {
            return null;
        }
        return adapter.getItem(selectedPosition);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) { //Fix for empty data
        ListAdapter adapter = getAdapter();
        return !(adapter == null || adapter.isEmpty()) && super.onTouchEvent(event);
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant