繁体   English   中英

带有复选框问题的Android列表视图

[英]Android listview with checkbox problem

我有一个奇怪的问题! 我正在尝试使用复选框创建列表视图。 在我的另一个线程中,我被告知我应该使用一个数组来跟踪被检查的行。 我做到了,它工作得很好,但逻辑错了,我现在遇到另一个问题。

public View getView(final int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.row, null);
        }

        CheckBox checkbox = (CheckBox)v.findViewById(R.id.checkbox);
        checkbox.setChecked(checked[position]);

        final LinearLayout rowLayout = (LinearLayout) v.findViewById(R.id.individualRow);

        checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){

            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked)
                {
                    rowLayout.setBackgroundColor(Color.GRAY);                       
                    checked[position] = false;                      
                }
                else
                {   
                    rowLayout.setBackgroundColor(Color.DKGRAY);
                    checked[position] = true;                       
                }
            }               
        });
   }

取消选中所有复选框后,它可以正常工作,即使我向下滚动并再次备份,但仍保留了我选中的复选框,但检查的数组未正确设置。 基本上if测试应该是另一种方式!

if(isChecked)
{
   rowLayout.setBackgroundColor(Color.GRAY);                        
   checked[position] = true;                        
}
else
{   
   rowLayout.setBackgroundColor(Color.DKGRAY);
   checked[position] = false;                       
}

问题在于滚动真的是因为每次我滚动onCheckedChanged方法都被调用,并且因为它回收了它在新行的位置传递的行,它没有被选中但是因为它与先前选择的那个具有相同的索引它改变了它的价值。 例如,如果我选中带索引2的框(将其设置为true),然后向下滚动一个新行变为索引为2的行,则再次调用该方法并取消设置复选框(已检查数组中的字段)。

我需要它来“记住”所有被检查的盒子。 换句话说,我希望正确初始化checked数组。 并且还要记住每次滚动时检查哪些盒子并且不丢失它们!

我究竟做错了什么?

你能帮我么?

提前谢谢 - 迈克

这很棘手。

问题是你正在调用setChecked ,激活旧的OnCheckedChangeListener

修复非常简单:在调用setChecked之前调用setOnCheckedChangeListener 这样,您可以从循环视图中切断与旧侦听器的链接。

选中此选项可在Listview单击选中Checkbox

AdpList adapter=new AdpList(this,array,false);
listview.setAdapter(adapter);

当您选择任何项目时,然后在项目CLickListener执行Follows

listview.setonItemClickListener(new OnItemClickListener)

在这里,您将获得当前项目的位置

array.get(Position);

获取Checkbox视图,单击Checkbox,在Adapter中创建一个方法,Like

adapter.setList(true);
adapter.notifyDataSetChanged();

并在适配器中检查我在Setlist方法中传递的参数然后放入条件:

if (isChecking==true)
{
checkbox1.setChecked(true);
}else{
checkBox1.setChecked(false);
}

暂无
暂无

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

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