如何获取setOnCheckedChangeListener(ListView复选框工作)

时间:2011-09-14 13:28:47

标签: java android

我标记了要删除的其他主题,因为主要问题被编辑了很多次,以至于它变得令人困惑。

所以问题是:我想用复选框填充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"&gt;
                    </<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&lt;String&gt;(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(), &quot;Checked&quot;,
                                    Toast.LENGTH_SHORT).show();
                          }
                         else
                        {
                             Toast.makeText(getBaseContext(), &quot;UnChecked&quot;,
                                    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永远不会工作....想知道它是否相关......

1 个答案:

答案 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。