Одиночный выбор, проверяемый cardView - PullRequest
0 голосов
/ 20 мая 2019

Я реализовал проверяемый CardView, выполнив https://medium.com/@AlbinPoignot/checkable-cardview-in-all-android-versions-7124ca6df1ab

Однако мне нужно позволить пользователю выбрать только одну опцию.Чтобы уточнить, если один уже отмечен, а пользователь выбирает другой, мне нужно отменить выбор предыдущего параметра.

Кроме того, мне нужно, чтобы при возвращении выбранный CardView сохранял проверенное состояние.

Может ли кто-нибудь помочь мне с этими 2 задачами?Ниже моя реализация:


    public class CheckableCardView extends CardView implements Checkable {

        private static final int[] CHECKED_STATE_SET = {
                android.R.attr.state_checked
        };

        private boolean isChecked;
        private TextView itemText;

        public CheckableCardView(Context context) {
            super(context);
            init(null);
        }

        public CheckableCardView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init(attrs);
        }

        public CheckableCardView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            init(attrs);
        }

        private void init(AttributeSet attrs) {
            LayoutInflater.from(getContext()).inflate(R.layout.checkable_card_view, this, true);

            setClickable(true);
            setChecked(false);

            setCardBackgroundColor(ContextCompat.getColorStateList(getContext(), R.color.selector_card_view_background));

            if (attrs != null) {
                TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.CheckableCardView, 0, 0);
                try {
                    String text = ta.getString(R.styleable.CheckableCardView_card_text);
                    itemText = (TextView) findViewById(R.id.text);

                    if (text != null) {
                        setText(text);
                    }

                } finally {
                    ta.recycle();
                }
            }
        }

        public void setText(String text){
            itemText.setText(text);
        }

        @Override
        protected int[] onCreateDrawableState(int extraSpace) {
            final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
            if (isChecked()) {
                mergeDrawableStates(drawableState, CHECKED_STATE_SET);
            }
            return drawableState;
        }

        @Override
        public boolean performClick() {
            toggle();
            return super.performClick();
        }

        @Override
        public void setChecked(boolean checked) {
            this.isChecked = checked;
        }

        @Override
        public boolean isChecked() {
            return isChecked;
        }

        @Override
        public void toggle() {
            setChecked(!this.isChecked);
        }
    }

...