Android Recyclerview показать скрыть флажок при нажатии - PullRequest
0 голосов
/ 29 сентября 2018

Я работаю со слушателем 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 после этого - логическое значение.Это не работает в данный момент.

Ответы [ 3 ]

0 голосов
/ 29 сентября 2018

Лучшим решением является добавление логического поля с именем isSelected в объект модели, передаваемый в просмотр повторной проверки.Начальное значение isSelected должно быть ложным.Затем в onBindViewHolder () добавьте yourCheckbox.setChecked (isSelected). Первоначально все флажки будут сняты, поскольку мы инициализировали isSelected со значением false.

Важной частью является прослушивание события onClick для флажка или всего представления.содержащий флажок.Если флажок установлен, тогда установите isSelected = true, иначе false.Не забудьте вызвать notifyDataSetChanged () для события clickCed / selectedCheckbox.

0 голосов
/ 29 сентября 2018

Чтобы сохранить любое состояние, добавьте еще одно свойство в вашу модель, как показано ниже

class ExpenseListModel{

public boolean show;


}

Затем используйте в вашем onBindViewHolder

@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("."));
        expenseVH.checkBox.setClickable(model.show ? true : false);
        expenseVH.checkBox.setVisibility(model.show ? View.VISIBLE : VIEW.INVISIBLE);

        }

Если вы хотите изменить статус, затем обновитев свой onclickListener и звоните notifyItemChanged(position)

0 голосов
/ 29 сентября 2018

Используйте вот так:

if(show)
{
    show== false;
    checkBox.setVisibility(View.VISIBLE);
}
else
{
    show==true;
    checkBox.setVisibility(View.GONE);
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...