当前位置: 首页 > 知识库问答 >
问题:

listView /适配器中的复选框是自己“按下”的

禄奇希
2023-03-14

更新#2我有一个listView和一个适配器。listView中的每个项目都有一个复选框。当单击列表视图中的复选框时,下面的复选框5-6个项目(重复-所有复选框)也看起来是按下的-灯亮着,即使没有人点击,当检查它是否真的用“isChecked”bool标志按下时,它是false。

公共类watchAllAdapter扩展ArrayAdapter {

public watchAllAdapter(Context context, ArrayList<Subject> arrayList) {
    super(context, 0, arrayList);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View listItemView = convertView;
    if (listItemView == null) {
        listItemView = LayoutInflater.from(getContext()).inflate(
                R.layout.for_each_watch_all, parent, false);
    }
    final Subject currSubject = getItem(position);

    final CheckBox cb = (CheckBox) listItemView.findViewById(R.id.checkbox_for_each);
    cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
            if (isChecked){
                currSubject.setChosen(true);
            }
            else{
                cb.setChecked(false);
                currSubject.setChosen(false);
            }
        }
    });

    return listItemView;
}

谢谢=]

共有2个答案

胥诚
2023-03-14

如果我是你,我会建议使用...

if(cb.isChecked()) {
    currSubject.setChosen(true);
}
else if (!cb.isChecked()) {
    currSubject.setChosen(false);
}
郗学
2023-03-14

尝试遵循View Holder模式。创建一个Holder类并在视图不为空的情况下重用该视图。如果视图已经存在,请将onCheckedChangedListener()复选框设置为空。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View listItemView = convertView;
    Holder holder = null;
    if (listItemView == null) {
        listItemView = LayoutInflater.from(getContext()).inflate(
                R.layout.for_each_watch_all, parent, false);
        holder = new Holder();

        holder.ckbox =(CheckBox)row.findViewById(R.id.check_box_id);

        listItemView .setTag(holder);
    }else {

        holder = (Holder) listItemView.getTag();
        holder.ckbox.setOnCheckedChangeListener(null);

    }
    final Subject currSubject = getItem(position);

    final CheckBox cb = (CheckBox) listItemView.findViewById(R.id.checkbox_for_each);
    cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
            if (isChecked){
                currSubject.setChosen(true);
            }
            else{
                cb.setChecked(false);
                currSubject.setChosen(false);
            }
        }
    });

    return listItemView;
}

private class ViewHolder {
    CheckBox checkBox;
}
 类似资料:
  • 我正在尝试将ListView与fragmnet中的自定义适配器(baseAdapter)一起使用。 当我直接在MainActivity中使用此代码时,一切正常,但当我在片段中使用此代码时,它没有崩溃,但它没有显示任何内容,它只是一个空白片段。另外,当我尝试使用简单的arrayAdapter在片段中绑定一个textView时,它工作得很好,所以我认为问题将出现在我的自定义适配器中。 为什么不显示Li

  • 问题内容: 我希望ListView包含按钮,但是设置按钮的xml属性onClick =“ myFunction”,然后在活动中放置公共void myFunction(android.view.View view)方法会导致NoSuchMethodException(堆栈跟踪为null)就像onclick侦听器在那里一样被抛出,它不会触发myFunction(…)并导致活动关闭。 如何创建将View

  • 我试图在按钮单击事件上清除Popup=>ListView中的选中复选框。 我尝试过循环listview并将property设置为false,但这不起作用。 在此处输入代码x:class=“uc.mainpage”xmlns=“http://schemas.microsoft.com/winfx/2006/xaml/presentation”xmlns:x=“http://schemas.micro

  • 问题内容: 这是我遵循的使用自定义Listview适配器的教程。我遇到的问题是,当我尝试清除适配器时,应用程序崩溃并抛出 更新的代码: 问题答案: 环顾四周,似乎是使用数组初始化适配器。请参阅带有ArrayAdapter.remove的UnsupportedOperationException和无法在ListView中修改ArrayAdapter:UnsupportedOperationExcep

  • 我尝试按照幻灯片youtube 6部分教程创建一个带有自定义行的列表视图。在他的教程中,他使用了1个图像和2个文本视图,我需要3个图像和3个文本视图,当我运行应用程序时,它在尝试加载列表视图时崩溃。 -------------家庭单行.xml----------------------- - Homelistview.xml - Homeactivitylistview.java 04-22 15

  • 我有一块碎片。加载的视图的onCreateView方法上的这个片段有一个ListView(a)(在适配器(a)中填充)。但是,此ListView(A)中有另一个ListView(B)。所以现在,我必须调用适配器(B)来填充这个listview(B)。如果我从片段调用它,我会得到一个空指针,如果我从适配器调用它(a),它不会崩溃,但不会工作。 如何调用另一个适配器中的适配器。 这是片段的代码: 其中