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

标签 android android-fragments android-listview android-arrayadapter android-checkbox

我想制作一个带有复选框的 ListView 。但是复选框检查无法正常工作, checkin 只是我列表中的第一个元素。你能帮我吗?这是我的代码

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

} 我怎样才能生成正确的位置,我的意思是检查/取消选中正确的项目

If i put a toast instead of ****, i gen the first item of the list

最佳答案

在@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"));
            }
        }
    });

关于android - 带有复选框和自定义适配器的 ListView, fragment 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67791071/

相关文章:

java - getActionbar() 的空指针异常

android - 为什么我的 ViewPager 这么慢?

android - 如果从 Home 或 Background 打开,应用程序不会恢复并再次从 Main Activity 启动

android - onOptionsItemSelected不能在 fragment 中工作

MvvmCross DataBinding 修改 Android ListView 中的单个项目

Android Studio 推送到 Github

java - new OnClickListener() 与 new View.OnClickListener()

android - 当 ESLint 发出错误时如何使 React Native 项目中的构建失败

android - setTag 和 getTag 问题 android listview

java - 使 ListView 项目可点击出现问题