Android 将自定义复选框添加到ListView

Android 将自定义复选框添加到ListView,android,checkbox,adapter,Android,Checkbox,Adapter,我在getView()中添加新复选框(PlanAdapter类) 当我向下滚动时,它看起来很好,但当我返回并向上滚动时,它崩溃了 计划课上的接受者、接受者 public CheckBox getCheckBox(){ return checkBox; } public void setCheckBox(CheckBox checkBox){ this.checkBox = checkBox; } 和我在主类中的复选框 for (

我在getView()中添加新复选框(PlanAdapter类)

当我向下滚动时,它看起来很好,但当我返回并向上滚动时,它崩溃了

计划课上的接受者、接受者

public CheckBox getCheckBox(){
        return checkBox;
    }

    public void setCheckBox(CheckBox checkBox){
        this.checkBox = checkBox;
    }
和我在主类中的复选框

    for (byte i = 0; i < db.planView.size(); i++) {
        chcBox = new CheckBox(this);
        chcBox.setId(i);
        checkboxList.add(chcBox);

        listOfPlan.add(new Plan(db.planView.get(i).getText().toString(), db
                .count(db.planView.get(i).getText().toString(),
                        getApplicationContext()), chcBox));

    }
for(字节i=0;i

日志:
http://wklej.to/RpBvr/html

您正试图将每个复选框添加到多个父视图中,但您无法这样做

然而,ListView已经有许多功能来实现复选框,以下是一种方法:

public class Example extends Activity implements OnItemClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String[] array = {"one", "two", "three"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, array);

        ListView listView = (ListView) findViewById(R.id.list);
        listView.setAdapter(adapter);
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        listView.setOnItemClickListener(this);
    }

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Log.v("Example", "ItemClick: " + ((ListView) parent).getCheckedItemPosition());
    }
}
public类示例扩展活动实现mclicklinklistener{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
字符串[]数组={“一”、“二”、“三”};
ArrayAdapter=新的ArrayAdapter(这个,android.R.layout.simple\u list\u item\u多选,数组);
ListView ListView=(ListView)findViewById(R.id.list);
setAdapter(适配器);
listView.setChoiceMode(listView.CHOICE\u MODE\u SINGLE);
setOnItemClickListener(this);
}
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Log.v(“示例”,“项单击:”+((ListView)父级).getCheckEditePosition());
}
}
只需传递自己的XML文件,即可自定义布局

添加


每次显示一行时,您都会刷新
条目
数据并尝试添加复选框,这就是为什么您可以向下滚动而不能向上滚动的原因。如果要保留自定义适配器,只需检查行是否已初始化,然后再尝试再次添加相同的值。

是否可以发布错误日志…请。请检查此项。
public class Example extends Activity implements OnItemClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String[] array = {"one", "two", "three"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, array);

        ListView listView = (ListView) findViewById(R.id.list);
        listView.setAdapter(adapter);
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        listView.setOnItemClickListener(this);
    }

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Log.v("Example", "ItemClick: " + ((ListView) parent).getCheckedItemPosition());
    }
}