2011-07-22 62 views
1

我有一個FrameLayout裏活動(未列出的活動)的內部列表視圖。Android的ListView的多選框

我可以用​​3210

如何確定點擊了哪個複選框聽點擊?我沒有得到任何索引。

PS OnListItemClicked超出範圍,因爲我沒有使用ListActivity

回答

1

您可以實現onListItemClickListener()。迭代所有的listview項目並檢查每個項目(每個項目子視圖)。

for(int i = 0; i <= listView.getLastVisiblePosition(); i++) 
    { 
     if(listView.getChildAt(i)!= null) 
     { 
      if(((CheckBox)listView.getChildAt(i).findViewById(R.id.checkbox)).isChecked()) 
      { 
      //do something 
      }else { //do something else} 

     } 
    } 

,或者你可以在getView()方法來檢查,如果該項目複選框被選中與否。

+0

哇那是一個骯髒的方式。我正在尋找更乾淨的東西。 – Taranfx

+0

如果(((複選框)listView.getChildAt(ⅰ).findViewById(R.id.checkbox))器isChecked()。) 可以簡化這 查看parentView = listView.getChildAt(ⅰ); CheckBox chkbox =(CheckBox)parentView.findViewById(R.id.checkbox); 如果(chkbox.isChecked()) –

+0

我的意思是我不想遍歷所有的孩子,應該有更好的方式來做到這一點。 – Taranfx

0

ListView控件仍然有setOnListItemClickedListener()方法,你可以創建你的聽衆作爲一個對象,並在傳遞,而不是實現它在你的活動範圍內。

編輯:是的是的話,它就會從適配器視圖繼承。

轉到ListView docs向下滾動到Inherited methods部分並單擊AdapterView左邊的箭頭,您會看到setOnItemClickListener()。在我確信它在那裏之前,我已經在代碼中使用了它。

+0

它沒有 – Taranfx

0

嘗試使用listView1.getCheckedItemPosition()。您也可以嘗試這樣做:

private int checkedItemPosition; 

listView1.setOnItemClickListener(new ListView.OnItemClickListener() 
{ 
    public void onItemClick(AdapterView<?> listView, View selectedItem, int position, long itemId) 
    { 
     CheckBox checkbox = (CheckBox)selectedItem.findViewById(R.id.checkbox); 
     if (checkbox.isChecked()) 
     { 
      checkedItemPosition = position; 
     } 
    } 
}); 
1

做這樣的事情

Vector vect = new Vector(); 
lv1.setAdapter(new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_multiple_choice, item)); 
    lv1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
    lv1.setClickable(true); 
    lv1.setScrollingCacheEnabled(true); 
    lv1.setOnItemClickListener(deleteclicklistener); 


private OnItemClickListener deleteclicklistener = new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View v, int position, 
      long id) { 
     if(vect.contains(position)) 
     { 
      vect.removeElement(position); 
     }else 
     { 
      vect.addElement(position); 
     } 
    } 
}; 

我想這應該解決您的問題

+0

訂單項應單獨點擊。將clickable設置爲True會使複選框+訂單項可點擊一下。 – Taranfx