点击时

时间:2018-09-29 11:32:08

标签: android android-recyclerview visibility

我正在使用界面在回收者视图中处理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是布尔值。目前无法正常工作。

3 个答案:

答案 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)

相关问题