2012-03-27 6 views
2

時に点滅している問題は、私は(ノーチェックマーク付き)CheckedTextView項目を含む(単一選択モード)のListViewを持っていると私は、テキストの色と現在チェック項目の背景色を決定するために、適切なセレクタを設定しています。 「選択」状態の色(赤に黒の)正しく適用されます:CheckedTextView:選択

  1. 私は、ListViewコントロールの項目を押します。何が起こる

    は次のとおりです。

  2. 私はアイテムをリリースします:突然、「デフォルト」状態の色(黒よりも白い色)に数秒間点滅します。
  3. 短い間違った点滅の後、項目は正しく「チェック済み」状態(赤色の黒色、偶然に「選択済み」状態と同じ)の色を正しく取ります。もちろん

、私は、このような点滅効果を取り除くために必要があると私は、これはかなり簡単なはず、しかし、残念ながら、私は私が間違っているのかを把握することができないと思います!間違っ点滅効果は唯一のAndroidの事前ハニカムバージョンで起こること

注(私はエミュレータと、物理デバイスの両方でこれをチェックしました)。

私はすでに(...彼らは本当に私の問題を解決しない限り、もちろん、)ので、既存の同様の記事に私を対処しないでください、答えを見つけるために、すべてWeb上で、すべてのスタックオーバーフロー上で検索しました。

以下では、上記の問題を再現するために必要なすべてのコードを見つけることができます。

活動(はい、それは互換性ライブラリのFragmentActivityですが、私は本当にそれが重要とは思わない):

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class TempListActivity extends FragmentActivity{ 

@Override 
protected void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.temp_list); 

    ListView listView = (ListView) findViewById(R.id.tempListView); 
    String[] array = new String[] { "one", "two", "three" }; 
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.temp_list_item, array); 
    listView.setAdapter(arrayAdapter); 
} 

} 

リストビュー:

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/tempListView" 
android:choiceMode="singleChoice" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
</ListView> 

として使用CheckedTextView ListViewアイテム:

<CheckedTextView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/list_item_title" 
android:height="?android:attr/listPreferredItemHeight" 
android:textColor="@drawable/list_item_text_custom" 
android:background="@drawable/list_item_custom" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" /> 

テキストカラーセレクタ(list_item_text_custom.xml):

<selector 
xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_checked="true" 
    android:color="#000000"> 
</item> 
<item android:state_pressed="true" 
    android:color="#000000"> 
</item> 
<item android:state_selected="true" 
    android:color="#000000"> 
</item> 
<item 
    android:color="#ffffff"> 
</item> 
</selector> 

背景色セレクタ(list_item_custom.xml):強調表示された背景

<selector 
xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_checked="true" 
    android:drawable="@drawable/highlighted_item_background"> 
</item> 
<item android:state_pressed="true" 
    android:drawable="@drawable/highlighted_item_background"> 
</item> 
<item android:state_selected="true" 
    android:drawable="@drawable/highlighted_item_background"> 
</item> 
<item 
    android:drawable="@drawable/normal_item_background"> 
</item>  
</selector> 

描画可能(highlighted_item_background.xml):

<shape 
xmlns:android="http://schemas.android.com/apk/res/android"> 
<solid android:color="#ff0000" />  
</shape> 

通常背景描画可能( normal_item_background.xml):

<shape 
xmlns:android="http://schemas.android.com/apk/res/android"> 
<solid android:color="#000000" />  
</shape> 

私は本当に素晴らしい回避策を見つけることを余儀なくされるのではなく、標準のAndroidセレクタメカニズムを活用したいと思っています。したがって、上記のコードを間違えた場合はお知らせください。

それ以外の場合は、ヘルプや代替ソリューションをご利用ください。

ありがとうございます。

答えて

0

私はあなたのための真の解決策を見つけることができなかったが、我々はあなたが持っているもの簡略化する場合は、多分私達は何がしたいとあなたが必要との間の妥協として許容できる何かを見つけることができます。

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

基本的には選択が常にハイライト表示されており、項目がの場合は通常のオンに設定されています。チェックしない場合はです。

+0

返信ありがとうございます!確かにあなたのソリューションは、点滅している問題を解決しますが、私はstate_pressedの管理を削除することは受け入れられないと思います。 あなたが既に知っているように、これを行うと、ユーザーがアイテムから指を離すまでユーザーが指をアイテムに置いたときにアイテムが強調表示されず、これは非常に珍しく、 、 私の考えでは。 問題は、state_pressed管理に関係しているようです:何らかの理由で、項目がstate_pressedからstate_checkedに移行する前に中間状態になりますが、どちらの状態ですか? – Luke

+0

残念ながら、私はカラーセレクタを使用している間に、望ましい動作を得ることができませんでした。論理的にxmlを調べると、リストやリスト項目の更新時に何か他のことが起こっていると結論づけなければならないと思います。私は、重要な箇所ではなく、getView()の背景色をオーバーライドすることができます。 –

+0

ご協力いただきありがとうございます。このような標準機能が意図したとおりに機能しないのは非常に残念ですが、私はあなたの助言に従わなければならないと思います。他の人がカラーセレクターでより良い運を得て、代わりの解決策を提供してくれることを願っているだけなので、私はあなたの答えを受け入れたものとしてマークしません。再度、感謝します。 – Luke

関連する問題