繁体   English   中英

RecyclerView 第一项总是被选中

[英]RecyclerView first item is always selected

我尝试了所有站点的所有解决方案,但无法解决此问题。 如代码所示,我试图将onClickListener添加到 RecyclerView,但始终检查第一项。 我还尝试将默认的checkedPosition-1 ,但列表的第一项是不可选择的。 除第一个项目外,所有其他项目都正常工作。

public class JsonListAdapter extends RecyclerView.Adapter <RecyclerView.ViewHolder> {
    private static final int TYPE = -1;
    private final List <Object> listRecyclerItem;
    private int checkedPosition = 0;

    public JsonListAdapter(Context context, List <Object> listRecyclerItem) {
        this.context = context;
        this.listRecyclerItem = listRecyclerItem;
    }

    public static class ItemViewHolder extends RecyclerView.ViewHolder {

        public ItemViewHolder(@NonNull View itemView) {
            super(itemView);
            //findViewById here
        }
    }

    @NonNull@Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        switch (i) {
        case TYPE:

        default:
            //LayoutInflater here
        }
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
        int viewType = getItemViewType(i);
        switch (viewType) {
        case TYPE:
        default:
            //add data to list here
        }

        row_linear.setOnClickListener(view - >{
            checkedPosition = i;
            notifyDataSetChanged();
        });
        radioButton.setOnClickListener(view - >{
            checkedPosition = i;
            notifyDataSetChanged();
        });
        if (checkedPosition == i) {
            radioButton.setChecked(true);
        } else {
            radioButton.setChecked(false);
        }
    }
}

当您获得列表时,使用额外的Boolean启动列表项,并创建 getter 和 setter:

private boolean isChecked = false;

public boolean getIsChecked() {
    return isChecked;
}

public void setIsChecked(boolean checked) {
    isChecked = checked;
}

然后在您的适配器中修改您的条件以检查两者:

if (listRecyclerItem.get(i).getIsChecked() && checkedPosition == i)

接下来,您需要在选中另一个项目后立即取消选中一个项目(假设您将其设为单选):

        radioButton.setOnClickListener(view- > {

            listRecyclerItem.get(i).setIsChecked(false); // to uncheck previous item
            checkedPosition=i;
            listRecyclerItem.get(i).setIsChecked(true); // to check current item

            notifyDataSetChanged();
            });

            if (listRecyclerItem.get(i).isChecked&&checkedPosition==i) {
                radioButton.setChecked(true);
            } else {
                radioButton.setChecked(false);
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM