У меня есть RecyclerView, в котором каждая строка представляет продукт. Строка имеет 3 состояния: отключено (серый фон), включено (белый фон), свободно (зеленый фон). В бесплатном продукте отображается флажок для установки продукта, добавляемого в корзину по умолчанию (своего рода пакет)
См. Изображение состояний строк здесь
.
ОПИСАННЫЙ ЛОГИ C IS:
- проведите пальцем влево / вправо, чтобы отключить / включить строку. (ОК, ГОТОВО)
- если включено, то вы можете щелкнуть строку, чтобы переключить ее состояние между значениями по умолчанию «не свободен (белая строка)» и «свободен (зеленая строка)» (ОК, ГОТОВО)
- Если строка зеленая, отображается флажок. Если вы установите флажок, продукт не только будет бесплатным, но и будет включен в комплект по умолчанию. (KO, NOT DONE YET)
- Если щелкнуть зеленую строку, строка будет переключена на белый и флажок должен 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);
}
}
Я не знаю, что делать! Пожалуйста, помогите кому-нибудь