Android:如何在单击ListView中的复选框时获取事件?

时间:2011-04-23 11:53:12

标签: android android-listview

我是Android新手,我正在尝试做一个简单的应用程序,我必须在应用程序的ListView中显示电话簿中可用的联系人列表,我正在尝试添加每个项目的复选框。当用户选中复选框时,我想要检索该项目。到目前为止,我能够显示列表,但不清楚如何检查复选框检查事件。

我的代码如下:

XML文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

<ListView 
    android:id="@android:id/android:list" 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight = "1"
    android:choiceMode="multipleChoice" android:clickable="true"/>

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id ="@+id/savebutton"
    android:text = "save"
    />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

<ListView 
    android:id="@android:id/android:list" 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight = "1"
    android:choiceMode="multipleChoice" android:clickable="true"/>

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id ="@+id/savebutton"
    android:text = "save"
    />

</LinearLayout>

源代码:

public class testcontacts extends ListActivity 
{
    private ListAdapter adapter = null;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //CheckBox box = (CheckBox)findViewById(R.id.checkbox);
        //box.setFocusable(false);

        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                null, null, null, null);

        adapter = new SimpleCursorAdapter
        (this, R.layout.contact_entry, cur,new String[] {ContactsContract.Contacts.DISPLAY_NAME}, new int[] {R.id.contactEntryText});   
        setListAdapter(adapter);

        ListView list = getListView();
        list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    } 
}

4 个答案:

答案 0 :(得分:0)

这将指定项目的位置

.getCheckedItemPositions()

答案 1 :(得分:0)

您可以使用getCheckedItemPosition方法获取已检查项目的位置。一旦有位置,您可以使用findViewById检索项目和isChecked方法进行检查。 这是一个例子:

     int pos = list.getCheckItemPosition(); //list being a ListView previously defined
     //Look for the checked CheckBox in the particular position
     CheckBox checkBox = (CheckBox)findViewById(pos);
     if (checkBox.isChecked()) {
     //Do something here
 }

希望它有所帮助。

答案 2 :(得分:0)

在listView onclick项目中。 这样做..

 CheckBox chkBox = (CheckBox) viewRow.findViewById(R.id.checkBoxXML);

此复选框将与点击的listitem复选框具有相同的状态。

答案 3 :(得分:0)

要创建一个侦听listview项目上的点击事件的事件,您可以尝试这样做:

list.setOnItemClickListener(new OnItemClickListener() {
          @Override
          public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
              CheckedTextView textView = (CheckedTextView)view;
              textView.setChecked(!textView.isChecked());
              switchAlarm(textView.isChecked(),position);
          }
        });

此代码将更改项目的chacked状态。

我希望它有所帮助。