android-recyclerview - 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();
}
});
}
}
}
谢谢你帮助我!
解决方案
推荐阅读
- php - Novo-Map 插件导致 WordPress 管理面板会话过期
- jenkins - Jenkins多分支管道不会自动构建
- r - ggplot 2,如何分解统计摘要?
- azure - Azure 队列实现与其他 Azure 解决方案
- mysql - ON DUPLICATE KEY UPDATE 针对特定索引或组合索引
- c++ - 键入时通过引用传递函数的问题
- google-cloud-platform - 谷歌云实例几个小时后随机超时?
- google-cloud-platform - 在 BigQuery 中运行联合查询到 Postgres Cloud SQL 实例时出现连接错误
- c++ - 删除旧的信号量 systemV
- javascript - 移动到 Windows 10 操作中心的 Chrome 通知无法清除?