复选框被选中而不选择它

Posted

技术标签:

【中文标题】复选框被选中而不选择它【英文标题】:checkbox is checked without select it 【发布时间】:2015-05-09 00:14:34 【问题描述】:

在我的列表视图中,我有一个带有复选框和声音的视图。当我选择一个复选框时,其他复选框也被选中,我不知道为什么。

在这个视频中我展示了这个问题:

http://www.dailymotion.com/video/x2iu5mn_aplication_tech

我能做什么?这是我的代码

custom_view.xml

   <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="horizontal" >

    <CheckBox
    android:layout_
    android:layout_
    android:id="@+id/checkBox1"

    />
    <TextView
    android:layout_
    android:layout_
    android:text="New Text"
    android:id="@+id/text1"/>

    <ImageView
    android:layout_
    android:layout_
    android:id="@+id/imageView"
    android:src="@android:drawable/ic_menu_add"
    />
    </LinearLayout>

自定义 ArrayAdapter.java

private class myArrayAdapter2 extends ArrayAdapter<String>

 private HashMap<Integer, Boolean> myChecked = new HashMap<Integer,Boolean>();

    public myArrayAdapter2(Context context, int resource, int textViewResourceId, List<String> objects) 
        super(context, resource, textViewResourceId, objects);

        for(int i = 0; i < objects.size(); i++)
            myChecked.put(i, false);
        
    


    @Override
    public View getView(final int position, View convertView, ViewGroup parent) 
        View row = convertView;


        if(row==null)
            LayoutInflater inflater=getLayoutInflater();
            row=inflater.inflate(R.layout.custom_view, parent, false);
        

        TextView textview = (TextView)row.findViewById(R.id.text1);
        textview.setText(myList.get(position));
        CheckBox checkBox=(CheckBox) row.findViewById(R.id.checkBox1);
        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() 
           @Override
           public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
                if(isChecked)
                    ruta.add(
                        Environment.getExternalStorageDirectory().getPath() 
                        + "/test/" + myList.get(position)
                        );
                  else 
                    shared = ruta.indexOf(
                        Environment.getExternalStorageDirectory().getPath() 
                        + "/test/" + myList.get(position)
                        );
                    ruta.remove(shared);
                
            
        );
        return row;
    

这是按钮监听器代码:

public void AudioClick(View view) 
        File file = new File(Environment.getExternalStorageDirectory().getPath()+"/test");
        List<String> myList = new ArrayList<String>();
        File list[] = file.listFiles();

        for( int i=0; i< list.length; i++)
            myList.add( list[i].getName() );
        

        ArrayAdapter myArrayAdapter = new MyArrayAdapter(
            this,
            R.layout.custom_textview,
            android.R.id.text1,
            myList
        );

        listvi.setAdapter(myArrayAdapter);
    

【问题讨论】:

请正确格式化您的代码。太难读了。 如果我不得不猜测一下,我会说当第一个被选中时被选中的复选框实际上是同一个复选框。确保所有复选框都是不同的对象。 抱歉,我会在 1 分钟内修复它。谢谢 这个javatpoint.com/android-checkbox-example你必须通过一些教程 谢谢 Md Hussain,我要复习一下 【参考方案1】:

从您的视频中可以看出,选择是以适当的间隔发生的。所以问题应该是,你的convertView 被重用了。

已经回答here。

看这个question了解Listview的回收。

我还建议使用ViewHolder。

【讨论】:

以上是关于复选框被选中而不选择它的主要内容,如果未能解决你的问题,请参考以下文章

取消选择并向下滚动后,列表视图中的复选框被选中。

Jquery复选框被选中?

将数据绑定到角度复选框

Django检查复选框是不是被选中

选择多个复选框并附加其值

滚动时,在recyclerView中取消选中复选框