Java 如何使setOnCheckedChangeListener(ListView复选框工作)
我标记了要删除的另一个线程,因为主要问题被编辑了很多次,所以变得很混乱 所以问题是:我想用复选框填充ListView,当我想自定义我的ListView时,我没有使用简单的多选项模式,而是将布局放在list_item.xml上:(对于每一行) 因此,我尝试为复选框创建一个setOnCheckedChangeListener,以便将所选项目存储在数组中 所以我做了这个听众:Java 如何使setOnCheckedChangeListener(ListView复选框工作),java,android,Java,Android,我标记了要删除的另一个线程,因为主要问题被编辑了很多次,所以变得很混乱 所以问题是:我想用复选框填充ListView,当我想自定义我的ListView时,我没有使用简单的多选项模式,而是将布局放在list_item.xml上:(对于每一行) 因此,我尝试为复选框创建一个setOnCheckedChangeListener,以便将所选项目存储在数组中 所以我做了这个听众: CheckBox cb = (CheckBox) findViewById(R.id.CheckBox01);
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异常。奇怪的是:如果我“切换”我的布局为一个简单的
<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(和我的适配器),它可以工作!那么,我的布局有什么问题
我创建了一个新的小项目,只是为了让你们看到确切的情况。它现在可用,但不起作用,但如果取消对适配器的注释,将ListActivity更改为Activity并更改setContentView,它将起作用(选中/未选中的toast文本)
我发现的另一件奇怪的事情是,使用ListActivity从来都不起作用。。。。想知道这是否有关系…好的,我想我明白你的问题了
CheckBox cb = (CheckBox) findViewById(R.id.CheckBox01);
这在第二个布局中起作用,因为您可能已经使用setcontentview()为活动设置了视图
所以,列表活动中的问题是,上面提到的行不知道要查找id必须查找哪个布局
R.id.CheckBox01
您必须访问正在对listview进行膨胀的布局视图,让我们将其称为膨胀视图
,然后像这样访问复选框
CheckBox cb = (CheckBox) inflatedView.findViewById(R.id.CheckBox01);
如果不设置内容视图,则必须告诉函数findviewbyd(),它必须在哪里查找视图。
如果你发布NPE日志,我会确认这一点
嗯。好吧,我想我明白你的问题了
CheckBox cb = (CheckBox) findViewById(R.id.CheckBox01);
这在第二个布局中起作用,因为您可能已经使用setcontentview()为活动设置了视图
所以,列表活动中的问题是,上面提到的行不知道要查找id必须查找哪个布局
R.id.CheckBox01
您必须访问正在对listview进行膨胀的布局视图,让我们将其称为膨胀视图
,然后像这样访问复选框
CheckBox cb = (CheckBox) inflatedView.findViewById(R.id.CheckBox01);
如果不设置内容视图,则必须告诉函数findviewbyd(),它必须在哪里查找视图。
如果你发布NPE日志,我会确认这一点
HTH.你能发布空异常日志吗?你能发布空异常日志吗?不幸的是,你的想法中缺少了一些东西-是不是,setContentView(R.Layout.Lista)出现在“第一种情况”中,因此应用程序知道ListView在哪里,适配器知道R.Layout.List\u项的每一行在哪里。。。。尽管如此,我还是尝试使用你的解决方案,但我不知道如何适应。在排队前我该怎么办?因为充气视图是某种东西的变量。。。风景@yashwanthkumar如果你想看一看,你有所有可用的代码。遵循这两个链接,我认为它们将帮助你以正确的方式访问复选框,其想法是你必须访问getView()方法中的复选框,谢谢。我现在在自定义适配器时遇到了一些问题,但我确信这就是问题所在。不幸的是,您的想法中缺少了一些东西-即“第一种情况”中存在setContentView(R.Layout.Lista),因此应用程序知道ListView在哪里,适配器知道R.Layout.List\u项的每一行在哪里。。。。尽管如此,我还是尝试使用你的解决方案,但我不知道如何适应。在排队前我该怎么办?因为充气视图是某种东西的变量。。。风景@yashwanthkumar如果你想看一看,你有所有可用的代码。遵循这两个链接,我认为它们将帮助你以正确的方式访问复选框,其想法是你必须访问getView()方法中的复选框,谢谢。我现在在自定义适配器时遇到了一些问题,但我确信这就是问题所在。