2012-07-25 55 views
2

我的ListView包含十行。每行包含CheckBox。我怎麼會檢查並取消CheckBox使用setOnItemClickListenersetOnItemClickListener將無法使用複選框?

示例代碼:(它不工作對我來說)

listview.setOnItemClickListener(new OnItemClickListener() 
{ 
    public void onItemClick(AdapterView<?> parent, final View v, final int position, long id) 
    { 
     Toast.makeText(this, " Position is " + position, Toast.LENGTH_SHORT) .show(); 
     holder.checkbox = (CheckBox) v.findViewById(R.id.lock_File_CheckBox); 
     holder.checkbox.toggle(); 
    } 
}); 

我們如何找到CheckBox是否被選中或取消選中?

+0

的活動,而不是在適配器創建holder類?? – AkashG 2012-07-25 12:25:06

回答

1

進去,你需要使用setTag()getTag()爲checkbox實例onItemClick()複選框的實例。您可以查看my example on my blog,它顯示了我們如何獲得onItemClick()內CheckBox的實例。

讓你的CheckBox實例裏面onItemClick()更新列表的內容,並通知裏面onItemClick()爲您的適配器後,

if(checkbox.isChecked()) 
    list.get(position).setSelected(false); 
else 
    list.get(position).setSelected(true); 

adapter.notifyDataSetChanged(); 
+0

謝謝。請解釋此代碼'list.get(position).setSelected(false);' – Sekar 2012-07-25 12:49:32

+0

那麼,'list.get(position)'將返回一個POJO類的實例,您將保存複選框的狀態。 – 2012-07-25 12:55:06

+0

謝謝拉利特。它工作正常。我得到了一個很好的答案。 – Sekar 2012-07-25 12:58:23

1

嘗試使用OnCheckedChangeListenerCheckBox

CheckBox repeatChkBx = (CheckBox) findViewById(R.id.repeat_checkbox); 
repeatChkBx.setOnCheckedChangeListener(new OnCheckedChangeListener() 
{ 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
    { 
     if (isChecked) 
     { 
      // perform logic 
     }else 
     { 
      // perform logic 
     } 
    } 
}); 
+0

不幸的是它不適合我... – Sekar 2012-07-25 12:48:27

+0

@ user1474868然後[試試這個](http://windrealm.org/tutorials/android/listview-with-checkboxes-without-listactivity.php) – Praveenkumar 2012-07-25 12:55:30

0

複選框有oncheckedChangeListener。
寫的ListView

Toast.makeText(this, " Position is " + position, Toast.LENGTH_SHORT) .show(); 
       holder.checkbox = (CheckBox) v.findViewById(R.id.lock_File_CheckBox); 
       holder.checkbox.toggle(); 


     holder.checkbox .setOnCheckedChangeListener(new OnCheckedChangeListener() 
{ 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
    { 
     if (isChecked) 
     { 
      // perform logic 
     }else 
     { 
      // perform logic 
     } 
    } 
}); 
0

的getView功能這段代碼的問題是,你不這樣做的position -parameter以確定哪些查看你點擊。 OnItemClickListener會爲您提供此參數以瞭解列表中的哪個項目已被點擊。在位置X處理這個項目的邏輯,你必須實現。

您的解決方案將是這個樣子:

lv.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v, int position, long arg3) { 
      // mData is the Array (or some other Collection) of Checkboxes which I gave to my ListAdapter 
      ((CheckBox)mData.get(position)).toggle(); 
     } 
    });