简体   繁体   English

带有复选框和自定义适配器的 ListView,片段无法正常工作

[英]ListView with checkbox and custom adapter, fragment not working properly

I want to make an listview with checkboxes.我想用复选框制作一个列表视图。 But the checkbox check is not working properly, is checkin right just the first element in my list.但是复选框检查无法正常工作,只是检查我列表中的第一个元素。 Can you help me pls?你能帮我吗? Here is my code这是我的代码

public class ToDoAdapter extends ArrayAdapter<ToDo> {

private FirebaseAuth mAuth;
FirebaseUser user;
FirebaseFirestore db;

private Context context;
private int resource;
private List<ToDo> list;
private LayoutInflater inflater;
CheckBox checkBox;
ToDo toDo;

public ToDoAdapter(@NonNull Context context, int resource, @NonNull List<ToDo> objects,
                   LayoutInflater inflater) {
    super(context, resource, objects);
    this.context=context;
    this.resource=resource;
    this.list=objects;
    this.inflater=inflater;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View view = inflater.inflate(resource,parent, false);
    mAuth = FirebaseAuth.getInstance();
    user = mAuth.getCurrentUser();
    db = FirebaseFirestore.getInstance();
    view.setClickable(true);
    view.setFocusable(true);
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Bundle bundle = new Bundle();
            bundle.putSerializable("todoID",position);
            bundle.putSerializable("item", ToDoFragment.arrayAdapterToDo.getItem(position)
                    .getDetalii());
            bundle.putSerializable("deadline", ToDoFragment.arrayAdapterToDo.getItem(position)
                    .getDeadline().toString());
            ToDoFragment.getInstance().newFragment(bundle);
        }
    });
    toDo = list.get(position);
    if(toDo!=null){
        addData(view, toDo.getDeadline());
        addDetalii(view, toDo.getDetalii());
        check(view, toDo.isEsteEfectuat());

    }

    checkBox = view.findViewById(R.id.checkbox);

    checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(checkBox.isChecked()) {
*****
                checkBox.setChecked(true);
                toDo.setEsteEfectuat(true);
                updateCheckBox();
                view.setBackgroundColor(Color.parseColor("#008000"));
            } else {
                checkBox.setChecked(false);
                toDo.setEsteEfectuat(false);
                updateCheckBox();
                view.setBackgroundColor(Color.parseColor("#FF0000"));
            }
        }
    });

    return view;
}

} How can i gen the right position, i mean the right item to check/uncheck } 我怎样才能生成正确的 position,我的意思是要选中/取消选中的正确项目

If i put a toast instead of ****, i gen the first item of the list如果我放一个吐司而不是****,我会生成列表的第一项

With the @blackapps's help, try this:在@blackapps 的帮助下,试试这个:

CheckBox checkBox = view.findViewById(R.id.checkbox);
    checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            toDo = ToDoFragment.arrayAdapterToDo.getItem(position);
            if(checkBox.isChecked()) {
                checkBox.setChecked(true);
                toDo = ToDoFragment.arrayAdapterToDo.getItem(position);
                toDo.setEsteEfectuat(true);
                updateCheckBox();
                view.setBackgroundColor(Color.parseColor("#008000"));
            } else  {
                checkBox.setChecked(false);
                toDo = ToDoFragment.arrayAdapterToDo.getItem(position);
                toDo.setEsteEfectuat(false);
                updateCheckBox();
                view.setBackgroundColor(Color.parseColor("#FF0000"));
            }
        }
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM