0

我已經能夠創建一個ListActivity,它顯示一個頁眉和一個頁腳,並夾在這些自定義佈局之間,每行包含三個複選框和一個聯繫人姓名(從聯繫人數據庫中讀取)。我使用SimpleCursorAdapter來顯示這些信息。我的問題是獲取OnListItemClicked()*來觸發。我點擊ListView(在聯繫人的名稱上的複選框AND),我的斷點永遠不會到達。所以:我必須做些什麼才能解決這個問題。我設置它,就像這樣:單擊列表項時如何識別關聯的小部件?

lv.SetOnListItemClicked(etc); 
  • 我認爲這是;我現在不在我的開發機器上

但即使我能夠觸發點擊事件,我將如何識別關聯的複選框?它們在佈局文件中被命名爲ckbx1,ckbx2和ckbx3(或左右),但是它們會有(Contacts.Count),那麼我怎樣才能確定哪些被點擊?

我的另一種選擇是在Activity的OnCreate()中動態創建小部件。

我這個僞代碼是下面,我願意接受建議這是否使或/反饋[不]去它的最好辦法:

OnCreate() { 
    Cursor c = getContacts(); 
    for (i = 0, i == c.Count, i++) { 
    int id = getContactID(i); 
    CheckBox ckbx1 = new CheckBox(); 
    ckbx1.Tag = id; 
    ckbx1.OnClick = Checkbox1Click(); 

    CheckBox ckbx2 = new CheckBox(); 
    ckbx2.Tag = id; 
    ckbx2.OnClick = Checkbox2Click(); 

    CheckBox ckbx3 = new CheckBox(); 
    ckbx3.Tag = id; 
    ckbx3.OnClick = Checkbox3Click(); 

    TextView tv = new TextView(); 
    tv.Text = getContactName(i); 
} 

Checkbox1Click() { 
    int ContactID = (CheckBox)object.Tag; 
    switch (ContactID) 
    case 1: 
    WriteToDB(1, Option1); 
    case 2: 
    WriteToDB(2, Option1); 
    ... 
} 

這(尤其是CheckboxClick事件處理程序)顯然非常粗糙,但我認爲你可以通過這種方式獲得我要去的位置 - 將複選框的「checked」狀態保存到SQLite數據庫,這樣我就知道Contact1需要電子郵件(或Twitter提要,或者其他兩個複選框指示的內容)。

所以是我以前的方法挽救的,或者我應該走這條新的路徑(或偏離了從一點點?)

回答

1

我通常使用View.setTag識別視圖實例。例如,

checkBox.setTag("listItem1"); 
相關問題