Фрагмент "щелчок строки" запускается ДО щелчка по флажку строки фрагмента - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть RecyclerView, в котором каждая строка представляет продукт. Строка имеет 3 состояния: отключено (серый фон), включено (белый фон), свободно (зеленый фон). В бесплатном продукте отображается флажок для установки продукта, добавляемого в корзину по умолчанию (своего рода пакет)

См. Изображение состояний строк здесь

.

ОПИСАННЫЙ ЛОГИ C IS:

  1. проведите пальцем влево / вправо, чтобы отключить / включить строку. (ОК, ГОТОВО)
  2. если включено, то вы можете щелкнуть строку, чтобы переключить ее состояние между значениями по умолчанию «не свободен (белая строка)» и «свободен (зеленая строка)» (ОК, ГОТОВО)
  3. Если строка зеленая, отображается флажок. Если вы установите флажок, продукт не только будет бесплатным, но и будет включен в комплект по умолчанию. (KO, NOT DONE YET)
  4. Если щелкнуть зеленую строку, строка будет переключена на белый и флажок должен go скрыт и не отмечен, потому что вы не можете установить продукт как «свободный по умолчанию», если продукт помечен как noN free (что происходит, когда вы переключаете строку в белый цвет) (OK, DONE)

ПРОБЛЕМА ЕСТЬ:

Когда строка находится в зеленом режиме, флажок отображается правильно, но если вы установите флажок, чтобы установить его, «щелчок строки» запускается ДО того, как флажок щелкнет , поэтому код установленного флажка никогда не выполняется (и флажок корректно исчезает)


КОД:

Щелчок строки обрабатывается фрагментом

recyclerView.addOnItemTouchListener(new CustomProductComponentEditFragment.RecyclerTouchListener(context,
            recyclerView, new CustomProductComponentEditFragment.ClickListener() {
        @Override
        public void onClick(View view, final int position) {
            //Values are passing to activity & to fragment as well
            setBtnSaveRed();
            componentRowContainer = view;
            CheckBox checkBox = view.findViewById(R.id.checkBox);
            /*
             * ROW CLICK LISTENER
             *
             * */
            if(cAdapter != null){
                if (product.getComponents().contains(componentsDataSource.get(position))) {
                    ComponentObj updatedComponent = componentsDataSource.get(position);
                    ComponentObj updatedProductComponent = getComponent(updatedComponent);

                    if (checkBox.getVisibility() == View.VISIBLE) {
                        updatedProductComponent.setFree(false);
                        updatedProductComponent.setHasdefault(false);
                        //checkBox.setChecked(false);
                        view.setBackgroundColor(Color.WHITE);
                        checkBox.setVisibility(View.INVISIBLE);
                    } else {
                        updatedProductComponent.setFree(true);
                        view.setBackgroundColor(Color.parseColor(GlobalSettings.getInstance().getStringValue("backgroundGridSelectedRow")));
                        checkBox.setVisibility(View.VISIBLE);
                    }
                    updateCustomComponentsProduct(updatedProductComponent, position);
                }
            }
        }

Щелчок флажка обрабатывается адаптером

public void onBindViewHolder(CustomProductComponentsAdapter.CustomProductComponentsViewHolder holder, int position) {
    ComponentObj componentObj = componentObjs.get(position);
    this.vHolder = holder;
    holder.title.setText(commonFunctions.capitalize(commonFunctions.localeName(componentObj.getId()).toLowerCase()));
    String compName = commonFunctions.localeName(componentObj.getId());
    checkBox = holder.checkBox;
    checkBox.setChecked(false);
    checkBox.setVisibility(View.INVISIBLE);

    /*
    * CHECKBOX CHANGE LISTENER
    *
    * */
    checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if(productComponents == null) {
                return;
            }

            ComponentObj updatedComponentObj = componentObjs.get(position);
            if(isChecked)
            {
                holder.containerCardView.setBackgroundColor(Color.parseColor(GlobalSettings.getInstance().getStringValue("backgroundGridSelectedRow")));
                updatedComponentObj.setHasdefault(true);
                productComponents.add(updatedComponentObj);
            }
            else
            {
                holder.containerCardView.setBackgroundColor(Color.parseColor(GlobalSettings.getInstance().getStringValue("colorBackgroundActionButtonDisabledLight")));
                updatedComponentObj.setHasdefault(false);
                productComponents.remove(updatedComponentObj);
            }
            onComponentCheckedListener.onCustomChecked(buttonView, productComponents, isChecked);
        }

    });

    if(productComponents!= null && productComponents.contains(componentObj)){
        ComponentObj productComponent = getComponent(componentObj);
        // no must be productComponent
        if(productComponent.getFree()) {
            checkBox.setVisibility(View.VISIBLE);
            if(componentObj.getHasdefault()) {
                checkBox.setChecked(true);
            }
            holder.containerCardView.setBackgroundColor(Color.parseColor(GlobalSettings.getInstance().getStringValue("backgroundGridSelectedRow")));
        } else {
            holder.containerCardView.setBackgroundColor(Color.WHITE);
        }
    } else {
        holder.containerCardView.setBackgroundColor(Color.parseColor(GlobalSettings.getInstance().getStringValue("colorBackgroundActionButtonDisabledLight")));
        checkBox.setVisibility(View.INVISIBLE);
    }


}

Я не знаю, что делать! Пожалуйста, помогите кому-нибудь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...