我正在使用界面在回收者视图中处理onclick侦听器。在onBindViewHolder中,我正在检查布尔值是true还是false,以确定是否需要显示复选框。
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是我正在使用java 1.8的onclick侦听器,因此lambda语法和之后的show
是布尔值。目前无法正常工作。
答案 0 :(得分:0)
像这样使用:
if(show)
{
show== false;
checkBox.setVisibility(View.VISIBLE);
}
else
{
show==true;
checkBox.setVisibility(View.GONE);
}
答案 1 :(得分:0)
最好的解决方案是在传递给recyclerview的模型对象中添加一个名为isSelected的布尔字段。 isSelected的初始值应为false。然后在onBindViewHolder()中添加yourCheckbox.setChecked(isSelected)。最初,由于我们使用false初始化了isSelected,因此所有复选框均未选中。
重要的部分是侦听复选框的onClick事件或包含复选框的整个视图。如果选中此复选框,则将isSelected设置为true,否则设置为false。 不要忘记在yourCheckbox click / checked事件上调用notifyDataSetChanged()。
答案 2 :(得分:0)
要保持任何状态,请在模型中添加一个其他属性,如下所示:
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)