2011-01-13 16 views
1

私はアイテムのリストを持っていますが、いくつかのアイテムはステータスを見ることができます。私はこれらのアイテムが異なる背景色を持ち、その後は残りの色を持つことを望みます。私のリストの特定のアイテムの色が異なります

リストビューには、基本的にリスト全体の単一のセレクタがあり、セレクタがバックグラウンドとしてアイテムのレイアウトの下に描画され、透明であることがカウントされるため、アイテムの1つに背景色を設定しません。

リストに複数のセレクタを定義する方法はありますか?余分な状態を持つセレクタを作成することは可能でしょうか?基本的に私が望むのは、通常のリストセレクターと余分な状態です。ColorDrawableはcolors.xmlに定義されています(drawableから継承することはできません。アンドロイドのlist_selector drawableはSDKで表示されません

+0

ok問題はセレクタにないことがわかりました。 私が欲しいのは、Gmailのアプリのようなアイテムには2つの異なる色のリストがあります。再び問題は、セレクタが表示されていない特定の項目の背景を設定したら、セレクタまたはプレスイベントで項目のaplhaレベルをどのように変更できるのかということです。 – codeScriber

答えて

3

答えを見つけました。 私の問題はセレクタの状態ではない、私はすべての項目のための同じ状態でセレクタをしたい! 問題は、アダプターのアイテムの特定のブール値がfalseで、ブール値がtrueの場合はアイテムが通常のものになりたいが、カラーがXであっても、それが選択または押されると透明にしたい。

だから、解決策は以下のxmlです:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:drawable="@android:color/transparent" /> <!-- pressed --> 
    <item android:state_selected="true" 
      android:drawable="@android:color/transparent" /> <!-- focused --> 
    <item android:drawable="@color/viewed_hotels_color" /> <!-- default --> 
</selector> 

私は、リスト自体は状態を取得1であっても、それはそれ子供(IEリストアイテムだと上の状態を渡すん見つけました)私はそれがしなかったと思った。 アンドロイド:ここでは有効ではありませんが、アンドロイドのリストアイテムはフォーカスされていませんが選択されていますので、押されたり選択されていない状態で見ることができます。すべて。私のアダプタで

私は(getViewメソッド()メソッドで)次のコードが必要になります。

View itemView = convertedView; <- i'll spare you the layout details... 
Item item = getItem(position); 
if(item.isViewed()){ 
    itemView.setBackgroundResource(R.drawable.viewed_item_background); 
}else{ 
    itemView.setBackgroundDrawable(null); 
} 

これは、すべての項目が右の背景を取得しますを確認します。もちろん、アイテムの状態が表示に変更され、私はそれがアダプタでnotifyDatasetCahnged()を呼び出す必要があることを表示したい場合。

0

Adapterのカスタムサブクラスを実装して、getView()メソッドをオーバーライドすることができます。これは、状態を追加するだけです。このメソッドは、リストによって呼び出され、単一の項目に対してViewを取得すると、getView()をオーバーライドすることによって単一のリスト項目の外観を定義できます。したがって、既に閲覧した項目の背景色を変更しても問題ありません。

UPDATE

ListViewクラスが延びるAbsListViewクラスはsetDrawSelectorOnTop()と呼ばれるメソッドを有します。私はそれを使ってセレクタの動作を制御できると思います。

+0

なぜ、これが機能しないのか説明しました。getView()で作成したビューをバックグラウンドで設定したときに、セレクタがビューの下に描画されるため、そのアイテムが押されたり選択されなくなったりするような状況を作成しますビューの背景を透明にカウントします。明らかに答える前にお読みください。 – codeScriber

+0

アップ、その後私はあなたが疑問に誤解しました。そのために残念。 – Flo

+0

probはありません:-)それは良い質問ですが;-) – codeScriber

関連する問題