Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 罢工通过文本标志未按预期工作_Java_Android_Android Studio_Checkbox - Fatal编程技术网

Java 罢工通过文本标志未按预期工作

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

这是我的RecyclerView适配器类

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);
    }
}