Java 罢工通过文本标志未按预期工作
这是我的RecyclerView适配器类Java 罢工通过文本标志未按预期工作,java,android,android-studio,checkbox,Java,Android,Android Studio,Checkbox,这是我的RecyclerView适配器类 public class TodoAdaptor extends RecyclerView.Adapter<TodoAdaptor.SingleTodoView> { private CheckBox checkbox; private TextView title, dueDate; private Context context; private ArrayList<SingleTodo> t
public class TodoAdaptor extends RecyclerView.Adapter<TodoAdaptor.SingleTodoView> {
private CheckBox checkbox;
private TextView title, dueDate;
private Context context;
private ArrayList<SingleTodo> todoList;
private onItemCLickListener itemCLickListener;
public TodoAdaptor(Context context, ArrayList<SingleTodo> todoList, onItemCLickListener onItemClickListener) {
this.context = context;
this.todoList = todoList;
this.itemCLickListener = onItemClickListener;
}
@NonNull
@Override
public SingleTodoView onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_todo, parent, false);
return new SingleTodoView(v, itemCLickListener);
}
@Override
public void onBindViewHolder(@NonNull SingleTodoView holder, int position) {
SingleTodo singleTodo = todoList.get(position);
checkbox.setChecked(singleTodo.isComplete());
title.setText(singleTodo.getTitle());
if (singleTodo.isComplete()) {
title.setPaintFlags(title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
Toast.makeText(context, "IsCompleted", Toast.LENGTH_SHORT).show();
} else {
title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
Toast.makeText(context, "Not IsCompleted", Toast.LENGTH_SHORT).show();
}
if (singleTodo.getDueDate().isEmpty()) {
dueDate.setVisibility(View.GONE);
} else {
dueDate.setText(singleTodo.getDueDate());
}
}
@Override
public int getItemCount() {
return todoList.size();
}
class SingleTodoView extends RecyclerView.ViewHolder {
private SingleTodoView(@NonNull View itemView, final onItemCLickListener itemCLickListener) {
super(itemView);
checkbox = itemView.findViewById(R.id.todo_list_completed_checkbox);
title = itemView.findViewById(R.id.todo_list_title);
dueDate = itemView.findViewById(R.id.todo_list_due_date);
title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemCLickListener.onTextClickListener(getAdapterPosition());
}
});
checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemCLickListener.onCheckboxClickListener(getAdapterPosition());
}
});
}
}
public interface onItemCLickListener {
void onTextClickListener(int position);
void onCheckboxClickListener(int position);
}
}
这是我的单打课
package com.example.simpletodo.classes;
public class SingleTodo {
private int id;
private String title;
private String dueDate;
private boolean isComplete;
public SingleTodo(int id, String title, String dueDate, boolean isComplete) {
this.id = id;
this.title = title;
this.dueDate = dueDate;
this.isComplete = isComplete;
}
public int getId() {
return id;
}
public String getTitle() {
return title;
}
public String getDueDate() {
return dueDate;
}
public boolean isComplete() {
return isComplete;
}
public void setId(int id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public void setDueDate(String dueDate) {
this.dueDate = dueDate;
}
public void setComplete(boolean complete) {
isComplete = complete;
}
}
每当我选中该复选框时,该项的文本都应该画出删除线,并且它没有按预期工作
我在列表中有3个项目,当我单击复选框时,项目被选中,文本删除线起作用,但当我再次单击复选框时,复选框保持选中状态(尽管对象正在按应有的方式更新),删除线文本恢复为正常,我必须再次单击复选框两次,复选框才能被取消选中
另一个问题是,当我检查项目,然后我尝试检查其他项目时,当前项目文本将被另一个检查项目文本替换。
图像:默认值:
单击复选框一次:
再次单击复选框时:
当我一个接一个地检查多个项目时(在检查项目是否处于默认顺序之前和检查之后,我没有更改任何项目的位置--按顺序--这就是我得到的)
感谢您的帮助。我只想让我的代码按预期工作。我从问题中找到了解决方案 我不得不改变我的适配器类。我在ViewHolder类和onBindViewHolder中声明了视图,我使用第一个参数(holder)来获取我的视图
public class TodoAdaptor extends RecyclerView.Adapter<TodoAdaptor.SingleTodoView> {
private boolean darkTheme;
private Context context;
private ArrayList<SingleTodo> todoList;
private onItemCLickListener itemCLickListener;
public TodoAdaptor(Context context, ArrayList<SingleTodo> todoList, boolean darkTheme, onItemCLickListener onItemClickListener) {
this.darkTheme = darkTheme;
this.context = context;
this.todoList = todoList;
this.itemCLickListener = onItemClickListener;
}
@NonNull
@Override
public SingleTodoView onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(context).inflate(R.layout.single_todo, parent, false);
return new SingleTodoView(v, itemCLickListener);
}
@Override
public void onBindViewHolder(@NonNull SingleTodoView holder, int position) {
SingleTodo singleTodo = todoList.get(position);
holder.checkbox.setChecked(singleTodo.isComplete());
holder.title.setText(singleTodo.getTitle());
if (singleTodo.isComplete()) {
holder.title.setPaintFlags(holder.title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
} else {
holder.title.setPaintFlags(holder.title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
}
if (singleTodo.getDueDate().isEmpty()) {
holder.dueDate.setVisibility(View.GONE);
} else {
holder.dueDate.setVisibility(View.VISIBLE);
holder.dueDate.setText(singleTodo.getDueDate());
}
}
@Override
public int getItemCount() {
return todoList.size();
}
class SingleTodoView extends RecyclerView.ViewHolder {
private CheckBox checkbox;
private TextView title, dueDate;
private SingleTodoView(@NonNull View itemView, final onItemCLickListener itemCLickListener) {
super(itemView);
checkbox = itemView.findViewById(R.id.todo_list_completed_checkbox);
title = itemView.findViewById(R.id.todo_list_title);
dueDate = itemView.findViewById(R.id.todo_list_due_date);
if (darkTheme) {
title.setTextColor(context.getResources().getColor(R.color.colorLightGray));
dueDate.setTextColor(context.getResources().getColor(R.color.colorLightGray));
} else {
title.setTextColor(context.getResources().getColor(R.color.colorBlack));
dueDate.setTextColor(context.getResources().getColor(R.color.colorBlack));
}
title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemCLickListener.onTextClickListener(getAdapterPosition());
}
});
checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemCLickListener.onCheckboxClickListener(getAdapterPosition());
}
});
}
}
public interface onItemCLickListener {
void onTextClickListener(int position);
void onCheckboxClickListener(int position);
}
}
公共类ToLoadaptor扩展了RecyclerView.Adapter{
私有布尔暗场;
私人语境;
私人ArrayList todoList;
私有的McClickListener项ClickListener;
public-TodoAdaptor(上下文上下文、ArrayList-todoList、布尔暗模式、onItemCLickListener-onItemCLickListener){
this.darkTheme=darkTheme;
this.context=上下文;
this.todoList=todoList;
this.itemCLickListener=onItemClickListener;
}
@非空
@凌驾
public SingleToView onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图v=LayoutFlater.from(上下文)。充气(R.layout.single_todo,parent,false);
返回新的SingleToView(v,itemCLickListener);
}
@凌驾
public void onBindViewHolder(@NonNull SingleTodoView holder,int位置){
SingleTodo SingleTodo=todoList.get(位置);
holder.checkbox.setChecked(singleTodo.isComplete());
holder.title.setText(singleTodo.getTitle());
if(singleTodo.isComplete()){
holder.title.setPaintFlags(holder.title.getPaintFlags()| Paint.STRIKE_-THRU_-TEXT_-FLAG);
}否则{
holder.title.setPaintFlags(holder.title.getPaintFlags()&(~Paint.STRIKE_-to_-TEXT_-FLAG));
}
if(singleTodo.getDueDate().isEmpty()){
holder.dueDate.setVisibility(View.GONE);
}否则{
holder.dueDate.setVisibility(View.VISIBLE);
holder.dueDate.setText(singleTodo.getDueDate());
}
}
@凌驾
public int getItemCount(){
返回todoList.size();
}
类SingleToView扩展了RecyclerView.ViewHolder{
私有复选框;
私有文本视图标题,dueDate;
private SingleToView(@NonNull View itemView,final onItemCLickListener itemCLickListener){
超级(项目视图);
checkbox=itemView.findviewbyd(R.id.todo\u list\u completed\u复选框);
title=itemView.findviewbyd(R.id.todo\u list\u title);
dueDate=itemView.findViewById(R.id.todo\u列表\u到期日期);
如果(暗色){
title.setTextColor(context.getResources().getColor(R.color.colorLightGray));
setextcolor(context.getResources().getColor(R.color.colorLightGray));
}否则{
title.setTextColor(context.getResources().getColor(R.color.colorBlack));
setextcolor(context.getResources().getColor(R.color.colorBlack));
}
title.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
onTextClickListener(getAdapterPosition());
}
});
checkbox.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
onCheckboxClickListener(getAdapterPosition());
}
});
}
}
公共接口侦听器{
void onTextClickListener(int位置);
void onCheckboxClickListener(int位置);
}
}
public class TodoAdaptor extends RecyclerView.Adapter<TodoAdaptor.SingleTodoView> {
private boolean darkTheme;
private Context context;
private ArrayList<SingleTodo> todoList;
private onItemCLickListener itemCLickListener;
public TodoAdaptor(Context context, ArrayList<SingleTodo> todoList, boolean darkTheme, onItemCLickListener onItemClickListener) {
this.darkTheme = darkTheme;
this.context = context;
this.todoList = todoList;
this.itemCLickListener = onItemClickListener;
}
@NonNull
@Override
public SingleTodoView onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(context).inflate(R.layout.single_todo, parent, false);
return new SingleTodoView(v, itemCLickListener);
}
@Override
public void onBindViewHolder(@NonNull SingleTodoView holder, int position) {
SingleTodo singleTodo = todoList.get(position);
holder.checkbox.setChecked(singleTodo.isComplete());
holder.title.setText(singleTodo.getTitle());
if (singleTodo.isComplete()) {
holder.title.setPaintFlags(holder.title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
} else {
holder.title.setPaintFlags(holder.title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
}
if (singleTodo.getDueDate().isEmpty()) {
holder.dueDate.setVisibility(View.GONE);
} else {
holder.dueDate.setVisibility(View.VISIBLE);
holder.dueDate.setText(singleTodo.getDueDate());
}
}
@Override
public int getItemCount() {
return todoList.size();
}
class SingleTodoView extends RecyclerView.ViewHolder {
private CheckBox checkbox;
private TextView title, dueDate;
private SingleTodoView(@NonNull View itemView, final onItemCLickListener itemCLickListener) {
super(itemView);
checkbox = itemView.findViewById(R.id.todo_list_completed_checkbox);
title = itemView.findViewById(R.id.todo_list_title);
dueDate = itemView.findViewById(R.id.todo_list_due_date);
if (darkTheme) {
title.setTextColor(context.getResources().getColor(R.color.colorLightGray));
dueDate.setTextColor(context.getResources().getColor(R.color.colorLightGray));
} else {
title.setTextColor(context.getResources().getColor(R.color.colorBlack));
dueDate.setTextColor(context.getResources().getColor(R.color.colorBlack));
}
title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemCLickListener.onTextClickListener(getAdapterPosition());
}
});
checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemCLickListener.onCheckboxClickListener(getAdapterPosition());
}
});
}
}
public interface onItemCLickListener {
void onTextClickListener(int position);
void onCheckboxClickListener(int position);
}
}