【发布时间】:2016-07-04 02:24:30
【问题描述】:
我有一个 checkListItems 列表。列表项有一个复选框。我想保存项目的状态。状态保存为 0 或 1。
我根据状态 0 或 1 显示选中或未选中的复选框。
有时它显示正确,但是当我向上和向下滚动时,更多项目被选中或取消选中,而我没有手动完成。
适配器:
public class CheckListItemAdapter extends RecyclerView.Adapter<CheckListItemAdapter.MyViewHolder>{
private List<CheckListItem> checkListItems;
Context context;
private String status;
private final OnItemClickListener listener;
public interface OnItemClickListener {
void onItemClick(CheckListItem item);
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title, budget;
public RelativeLayout parent;
private CheckBox checkBox;
public MyViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.title);
budget =(TextView) view.findViewById(R.id.budget);
checkBox = (CheckBox) view.findViewById(R.id.checkBox);
}
public void bind(final CheckListItem item, final OnItemClickListener listener) {
itemView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
listener.onItemClick(item);
}
});
}
}
public CheckListItemAdapter(List<CheckListItem> checkListItems,Context context,OnItemClickListener listener) {
this.checkListItems = checkListItems;
this.context = context;
this.listener = listener;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.checklist_item, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
final CheckListItem item = checkListItems.get(position);
holder.title.setText(item.getTitle());
holder.budget.setText(item.getBudget());
status = item.getStatus();
if(status.equals("1"))
{
holder.checkBox.setChecked(true);
}
if(status.equals("0")) {
holder.checkBox.setChecked(false);
}
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
status = "1";
HashMap<String, String> params = new HashMap<String, String>();
params.put("checklistItemId", item.getCheckListItemId());
params.put("budget",item.getBudget());
params.put("text", item.getTitle());
params.put("time_due", item.getDateTime());
params.put("reminder",item.getReminder());
params.put("status", status);
new UpdateCheckListItemsAsyncTask(context).execute(params);
} else
{
status = "0";
HashMap<String, String> params = new HashMap<String, String>();
params.put("checklistItemId", item.getCheckListItemId());
params.put("budget",item.getBudget());
params.put("text", item.getTitle());
params.put("time_due", item.getDateTime());
params.put("reminder",item.getReminder());
params.put("status", status);
new UpdateCheckListItemsAsyncTask(context).execute(params);
}
}
});
holder.bind(checkListItems.get(position), listener);
}
@Override
public int getItemCount() {
return checkListItems.size();
}
}
这里出了什么问题?如何保存复选框的位置?
谢谢你..
【问题讨论】:
-
如何获取已检查项目的位置信息?假设用户检查了列表中的第 5 项,你怎么知道它的第 5 位?当您在检查后更新您的项目时,您不会检索该对象进行更新,而是在每次检查项目时创建新的 Hashmap。
-
我想将它保存在服务器中我有一个 asyncTask 来更新项目,所以我正在调用它。 @智能白痴
标签: android checkbox position android-recyclerview android-adapter