2011-10-18 43 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に入れていると、彼らはリストビューのリスト項目からクリックイベントを受信しませんので、私はそれと推測。

答えて

0

OnClickEventを受け取らなくても、同じサイズのList Itemsのブール型ArrayListを使用してこれらのチェックボックスの状態を維持することができます。 Here,私はちょうどそのようなものに答えました。私はそれがあなたに良いアイデアを与えることを願っています。

1

私は違うと思います。 source code of simple_list_item_multiple_choice.xmlを見ると、属性が?android:attr/listChoiceIndicatorMultipleに設定されています。これは、から見ることができるように、CheckedTextViewが内部的にどのような状態になっていてもチェックボックスを描画するために内部的に使用するものです。

レイアウトのCheckedTextViewの定義には、この属性がありません。これはLinearLayout要素でCheckedTextViewを使用するのではなく、私が責任を負うことになります。

私は間違っており、あなたは正しく推測しました。カスタムListViewの行はCheckableを実装する必要があると思われますが、CheckedTextViewがありますが、LinearLayoutはありません。詳細は別のStackOverflowスレッドのthis answerを参照してください。

0

同じ問題があったので、CheckedTextViewでカスタムレイアウトを使用する代わりに、レイアウトをandroid.Routlay.simple_list_item_multiple_choiceに変更しました。そして今は走っています!

0

この問題の2つの簡単な解決策があります。

  1. はのLinearLayoutとユーザーのみCheckedTextViewを(はい、それは可能である)を取り外します。したがって、レイアウトの主な要素はチェック可能で、マークされます。

  2. 上記の11のminSDKの場合は、android:checkMarkeをカスタマイズし、状態を[有効]に設定してください。ここでの例である:

例コード:

<?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のバグだと思う。

関連する問題