Я работаю со слушателем onclick в представлении переработчика, используя интерфейс.В onBindViewHolder я проверяю, является ли логическое значение истинным или ложным, определить, нужно ли показывать этот флажок.
if(show){
checkBox.setVisibility(View.VISIBLE);
}else{
checkBox.setVisibility(View.INVISIBLE);
}
, но при изменении логического значения видимость представления не изменяется, так как onBindViewне называется.Как вызвать onBindView или обновить элементы так, чтобы их видимость отражалась.
Вот код адаптера:
@Override
public void onBindViewHolder(@NonNull ExpenseVH expenseVH, int i) {
ExpenseListModel model = arrayList.get(i);
Log.i(TAG, "onBindViewHolder: "+ showCheck);
expenseVH.date.setText(model.getDate());
expenseVH.vendor.setText(model.getVendor());
expenseVH.center.setText(model.getCenter());
expenseVH.item.setText(model.getItem());
expenseVH.app_amt.setText(String.format("%s %s", context.getResources().getString(R.string.Rs),model.getApp_amt()));
expenseVH.amount.setText(String.format("%s %s", context.getResources().getString(R.string.Rs), model.getAmount()));
expenseVH.sl.setText(String.valueOf(i + 1).concat("."));
if(showCheck){
expenseVH.checkBox.setClickable(true);
expenseVH.checkBox.setVisibility(View.VISIBLE);
}else{
expenseVH.checkBox.setClickable(false);
expenseVH.checkBox.setVisibility(View.INVISIBLE);
}
Адаптер принимает контекст, массив, интерфейс onclick и логическое значение для переключения видимости
ExpenseAdapter adapter = new ExpenseAdapter(this,arraylist,pos ->{
if(value){
showCheck = true;
}else{
showCheck = false;
}
},showCheck);
здесь pos - слушатель onclick. Я использую java 1.8, следовательно, синтаксис лямбда-выражения и show
после этого - логическое значение.Это не работает в данный момент.