2011-10-18 172 views
3

我有一個列表視圖動態填充CheckedTextViews。列表視圖被設置爲多選模式。我使用OnItemClickListener來響應我的列表視圖上的點擊。此外,我用CheckedTextView的佈局製作了一個XML文件(實際上它只是一個標準的android.R.layout.simple_list_item_multiple_choice的副本)。所以在這種情況下,所有工作都很好:當我點擊列表視圖中的某個項目時,相應的checkedtextview就會被檢查。但是當我嘗試使用以下佈局時,checkedtextview不響應點擊,仍然未選中。CheckedTextView沒有響應點擊

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ll" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:orientation="vertical" 
    android:padding="5px"> 
    <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@android:id/text1" 
     android:layout_width="fill_parent" 
     android:layout_height="?android:attr/listPreferredItemHeight" 
     android:gravity="center_vertical" 
     android:drawableLeft="@drawable/checkbox_selector" 
     android:paddingLeft="6dip" 
     android:paddingRight="6dip" 
     android:background="#00ffffff" 
     android:textSize="15sp" 
     android:singleLine="true"/> 
</LinearLayout>  

我想這是因爲CheckedTextViews投入的LinearLayout,他們不從列表視圖的列表項接收click事件。

回答

0

那麼即使他們沒有收到OnClickEvent,您仍然可以使用相同大小的List Items的布爾ArrayList維護這些複選框的狀態。 Here,我剛剛回答了這樣的問題。我希望它會給你一個更好的主意。

1

我猜不同。如果您查看source code of simple_list_item_multiple_choice.xml,則會看到android:checkMark屬性設置爲?android:attr/listChoiceIndicatorMultiple。這是CheckedTextView內部用來繪製該複選框的狀態,正如您可能從its source code中看到的那樣。

但是您的佈局中CheckedTextView的定義缺少此屬性。這是我的責任,而不是在LinearLayout元素中使用CheckedTextView

我錯了,你猜對了。看起來,自定義ListView的行需要實現Checkable,其中CheckedTextView確實,但LinearLayout沒有。有關詳細信息,請參閱另一個StackOverflow線程中的this answer

0

我與同樣的問題,所以我改變了佈局到android.R.layout.simple_list_item_multiple_choice,而不是使用自定義佈局與CheckedTextView。現在它正在運行!

0

有此問題的兩種簡單的解決方案:

  1. 取出的LinearLayout和用戶僅CheckedTextView(是的,這是可能的)。所以佈局的主要元素是可檢查的,它將被標記。

  2. 如果您的minSDK是11以上,請自定義android:checkMarke並將狀態設置爲Activated。下面是一個例子:

示例代碼:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_activated="true" android:drawable="@drawable/checkbox_selected"/> 
    <item android:state_activated="false" android:drawable="@drawable/checkbox_deselected" /> 
    <item android:state_checked="false" android:drawable="@drawable/checkbox_deselected" /> 
    <item android:state_checked="true" android:drawable="@drawable/checkbox_selected" /> 
</selector> 

來源:http://www.jiahaoliuliu.com/2013/08/customizing-checkbox-in-android.html

中間水平的解決方案是自定義onItemClickListener列表視圖,在此代碼,如下所示: https://github.com/jiahaoliuliu/CustomizedListRow

困難但正確的解決方案是由MarvinLab提出的方案: http://www.marvinlabs.com/2010/10/29/custom-listview-ability-check-items/

相關的問題:What is the difference between the states selected, checked and activated in Android?

0

此問題是由ATTR singleLine = true引起的。如果你刪除這個或用maxLines = 1替換,它會正常工作。其實,當你點擊該項目—時,狀態會被檢查。我認爲這是一個Android錯誤。