2014-04-16 90 views
0

我在ListView的行項中使用CheckBox。將CheckBox設置爲android:focusable="false"。所以ListView的OnItemClickListener工作正常,但checkBox似乎是不可點擊的。我該如何解決這個問題?ListView內部的Android CheckBox在onItemClickedListener工作時不可點擊

在我的自定義arrayAdapter:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     FileHolder holder; 
     if(v == null){ 
      LayoutInflater inflater = ((Activity)getContext()).getLayoutInflater(); 
      v = inflater.inflate(layoutResourceId, parent, false); 
      holder = new FileHolder(); 
      holder.isChecked = (CheckBox)v.findViewById(R.id.checkBox1); 
      v.setTag(holder); 
      holder.isChecked.setOnClickListener(new OnClickListener(){ 

       @Override 
       public void onClick(View v) { 
        Log.d("common", "checked"); 
       } 

      }); 
     } 
} 

在row_item.xml:

<CheckBox 
     android:id="@+id/checkBox1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:button="@drawable/checkbox" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:clickable="true"/> 

編輯:我想註冊一個OnTouchListener,但onTouch()獲取也不會被調用。

+0

可能重複http://stackoverflow.com/questions/8413656/onitemclicklistener-doesnt-work-with-listview-item-containing-button – nKn

+0

@nKn:請閱讀該問題或至少其標題... – user2224350

回答

1

我不認爲你應該設置focusable和focusableInTouchMode爲false。 嘗試空當你誇大佈局

v = inflater.inflate(layoutResourceId, null, false); 

希望這將有助於設定父。

此外,我認爲如果您的名單很長,您將有一個性能問題。如果列表中有很多行,則不鼓勵在getView(int position, View convertView, ViewGroup parent) {}上創建new OnClickListener(){}。在監聽器的實例上創建它爲所有行創建。您可以使用標籤來確定點擊哪個視圖。

+0

是你是對的OnClickListener,謝謝! 但是,將焦點設置爲false是必要的,否則onItemClickListener將不起作用:http://www.mysamplecode.com/2012/07/android-listview-checkbox-example.html 不幸的是,在沒有rootView的情況下膨脹行視圖並不會更好地工作 – user2224350