首页 > 解决方案 > recyclerview中的用户单选按钮如何保存检查状态?

问题描述

我的回收站视图有服务器模型,用户可以选择一项(单选按钮)蚀刻时间。我的问题是如何在 recyclerview 中处理第一次检查或保存选择状态。我的代码工作正常!但在检查任何单选项目之前我无法设置选定的单选按钮!

我的适配器:

public class SelectIpAdapter extends RecyclerView.Adapter<SelectIpAdapter.ViewHolder> {

private Context context;
private List<ServerIp> serverIps;
private int lastSelectedPosition = -1;

public SelectIpAdapter(Context context, List<ServerIp> serverIps) {
    this.context = context;
    this.serverIps = serverIps;


}


@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_select_ip, parent, false);
    return new ViewHolder(v);
}

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
    holder.txtServerName.setText("Server Number " + (position + 1));
    if (lastSelectedPosition == position) {
        holder.cbSelectIp.setSelected(true); //using selector drawable
    } else {
        holder.itemView.setSelected(false);
    }
    holder.root.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            setApiClient(position);
            if (lastSelectedPosition >= 0)
                notifyItemChanged(lastSelectedPosition);
            lastSelectedPosition = holder.getAdapterPosition();
            notifyItemChanged(lastSelectedPosition);
        }
    });

    holder.cbSelectIp.setChecked(lastSelectedPosition == position);


}


private void setApiClient(int position) {
  //  boolean isActive = ServerIpRepository.getInstance().ActiveIp(serverIps.get(position).getId());
    Utility.ChangeIpApp(false, serverIps.get(position).getIp());
   //    if (isActive)
       
}


@Override
public int getItemCount() {

    return serverIps.size();

}

class ViewHolder extends RecyclerView.ViewHolder {


    private TextView txtServerName, txtServerStatus;
    private RadioButton cbSelectIp;
    private ConstraintLayout root;


    public ViewHolder(View v) {
        super(v);
        cbSelectIp = (RadioButton) v.findViewById(R.id.dialog_check_box);
        txtServerName= (TextView) v.findViewById(R.id.dialog_txt_server_name);
        txtServerStatus = (TextView) v.findViewById(R.id.dialog_txt_server_state);
        root = (ConstraintLayout) v.findViewById(R.id.root);


        cbSelectIp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                lastSelectedPosition = getAdapterPosition();
                notifyDataSetChanged();
            }
        });


    }


}

}

谢谢你帮助我!

标签: android-recyclerviewradio-button

解决方案


推荐阅读