2011-07-30 44 views
0

我想讓ListView的每一行都有一些文本和一個複選框。我知道這是一個解決的問題,但我試圖自己做,無論如何我都非常接近它的工作。禁用ListView中CheckBox的交互操作

這是我的演示應用程序github

單擊除複選框外的其他任何位置的ListView項目都會正確註冊該框已被選中。單擊該框不會導致OnItemClick事件,因此檢查框未被註冊。

我可以添加一個偵聽器到每個複選框,並保持適配器內部的狀態,這將是很好的,但我需要有一些方法讓HomeActivity知道列表何時檢查應用程序,何時不檢查啓用/禁用某些按鈕)。我正在考慮使用回調,但我從來沒有用Java做過。

爲了解決一些共同的話題在這個問題:

  • 複選框有機器人:可聚焦和android:focusableInTouchMode都設置爲false
  • 我想機器人:可點擊=「假」的複選框,但隨後用於列表的OnItemClick方法從未被調用過。
  • 我在HashMap中維護複選框的狀態,以便在重用視圖時可以在適配器中正確設置它們。
+0

我很難理解你的問題是什麼。你想要達到什麼目的? –

+0

我想獲得一個listview列表中的每個項目都有一個複選框。我需要能夠統計檢查項目的數量,然後按位置或ID獲取它們的列表。 – Derek

回答

0

由於您將複選框focusable和focusableInTouchMode設置爲false,它將不會獲得任何事件。請參閱單擊的監聽器將工作或複選框,您不能讓他們兩個同時工作。

你可以做的是,將監聽器附加在視圖上的bindView上,也可以放在複選框上。通過這種方式,你可以得到在HomeActivity監聽通話被點擊行或複選框時...

你可以爲它創建界面..........

Public Interface MyClickListener{ 
    public void onClick(); 

}

創建對象MyClickListener對象;
object.onClick();

0

這將讓你列表視圖所有的意見,並會得到複選框中的每個視圖,如果檢查其添加到列表:

List<CheckBox> listOfCheckboxes = new ArrayList<CheckBox>(); 
List<View> listOfViews = new ArrayList<View>(); 
listView1.reclaimViews(listOfViews); 
for (View v : listOfViews) 
{ 
    CheckBox cb = (CheckBox)v.findViewById(R.id.checkbox); 
    if (cb.isChecked()) 
    { 
     listOfCheckboxes.add(cb); 
    } 
} 
0

禁用getView()方法

內複選框點擊
((CheckBox) result.findViewById(R.id.checkBox)).setClickable(false); 

適合我。