我标记了要删除的其他主题,因为主要问题被编辑了很多次,以至于它变得令人困惑。
所以问题是:我想用复选框填充ListView,因为我想自定义ListView我不使用simple_multiple_choice_mode,我将我的布局放在list_item.xml上:(对于每一行)
<CheckBox>
xmlns:android="http://schemas.android.com/apk/res/android" android:paddingLeft="8mm"
android:layout_width="fill_parent"
android:layout_height="wrap_removed" android:id="@+id/nomeAPP" style="?listItem">
</<CheckBox>
我的ListView位于lista.xml
<ListView android:id="@android:id/list"
android:layout_width="fill_parent" android:layout_height="wrap_content"
style="?whiteBackground">
我的适配器:
list=getListView();
this.setListAdapter(new ArrayAdapter<String>(this,
R.layout.list_item, aux))
所以我正在尝试为复选框创建一个setOnCheckedChangeListener,因此我可以将选中的项目存储在一个数组中。
所以我做了这个听众:
CheckBox cb = (CheckBox) findViewById(R.id.CheckBox01);
cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
if (buttonView.isChecked()) {
Toast.makeText(getBaseContext(), "Checked",
Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getBaseContext(), "UnChecked",
Toast.LENGTH_SHORT).show();
}
}
});
问题是:我得到了NULL异常。 CURIOUS 的事情是:如果我“切换”我的布局以获得简单的
<ScrollView android:id="@+id/widget54" android:layout_width="fill_parent"
android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<CheckBox android:text="Checkbox" android:id="@+id/CheckBox01"
android:layout_width="wrap_content" android:layout_height="wrap_content"></CheckBox>
</LinearLayout>
</ScrollView>
忘记我的ListView(和我的适配器),它的工作原理!那么,我的布局出了什么问题?
我创建了一个新的小项目,只是为了让你们看到确切的情况。它可用HERE现在不起作用,但是如果取消注释适配器,将ListActivity更改为Activity并更改setContentView,它将起作用(选中/取消选中Toast文本)。
我发现的另一个奇怪的事情是,ListActivity永远不会工作....想知道它是否相关......
答案 0 :(得分:1)
CheckBox cb = (CheckBox) findViewById(R.id.CheckBox01);
这适用于第二种布局,因为您可能已使用setcontentview()设置了活动的视图。
所以,你的列表活动中的问题是,上面提到的行不知道,它必须寻找哪个布局来查找id,
R.id.CheckBox01
您必须访问要为列表视图充气的布局视图,我们将其称为inflatedView
,然后您可以像这样访问复选框。
CheckBox cb = (CheckBox) inflatedView.findViewById(R.id.CheckBox01);
如果你没有设置内容视图,你必须告诉函数findViewById(),它必须在那里寻找视图。 如果您发布NPE日志,我会确认这一点。
HTH。