2011-04-23 138 views
2

我是新來的Android,我試圖做一個簡單的應用程序,我必須在應用程序的ListView中顯示電話簿中可用的聯繫人列表,我嘗試添加複選框t每個項目。當用戶選中複選框時,我想要檢索該項目。到目前爲止,我能夠顯示列表,但不清楚如何檢查複選框檢查事件。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); 

    } 
} 

回答

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 
} 

希望它幫助。

0

這將使該項目的當前位置檢查

.getCheckedItemPositions() 
+0

你好Soorya,謝謝你的回覆,但我該如何捕捉事件?如何知道何時選中/取消選中複選框? – Madz 2011-04-24 13:11:48

0

在listView onclick項目中。 做這樣的..

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

此複選框將具有相同的狀態,點擊列表項複選框。

0

要創建收聽點擊列表視圖的項目,你可以試試這個事件的事件:

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狀態。

我希望它有幫助。

相關問題