Java 如何使setOnCheckedChangeListener(ListView复选框工作)

Java 如何使setOnCheckedChangeListener(ListView复选框工作),java,android,Java,Android,我标记了要删除的另一个线程,因为主要问题被编辑了很多次,所以变得很混乱 所以问题是:我想用复选框填充ListView,当我想自定义我的ListView时,我没有使用简单的多选项模式,而是将布局放在list_item.xml上:(对于每一行) 因此,我尝试为复选框创建一个setOnCheckedChangeListener,以便将所选项目存储在数组中 所以我做了这个听众: CheckBox cb = (CheckBox) findViewById(R.id.CheckBox01);

我标记了要删除的另一个线程,因为主要问题被编辑了很多次,所以变得很混乱

所以问题是:我想用复选框填充ListView,当我想自定义我的ListView时,我没有使用简单的多选项模式,而是将布局放在list_item.xml上:(对于每一行)

因此,我尝试为复选框创建一个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异常。奇怪的是:如果我“切换”我的布局为一个简单的

    <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()方法中的复选框,谢谢。我现在在自定义适配器时遇到了一些问题,但我确信这就是问题所在。