2011-05-23 8 views
1

onitemclicklistenerを使用してリストビューアイテムにアクセスする方法を知っていますが、コード内で背景色を変更する方法は何ですか。リストビュー内の特定のビューを参照する方法

sudoのコード:

lv[0].setBackgroundResource(R.color.red); //change the background of the first listview item 

は、リストビューの各ビューにアクセスする方法はありますか?

答えて

2

@Matt:それは弱いわけではない、あなたはちょうどそれが動作する方法を理解する必要があります。

Yellavonでは、いつでもListViewには表示可能なアイテムしか含まれていないため、アイテムに直接アクセスしたり変更したりすることはできません。ビューからスクロールすると、ビューはリサイクルされ、ListAdapterによってデータが移入されます。このアダプタの中では、項目が異なるケースを処理する必要があります。 getView()メソッドで独自のカスタムListAdapter(ArrayAdapter、BaseAdapterなど)を作成した場合は、背景色を変更するケースを処理するためにロジックを追加するだけです。

はのは、たとえば、あなたが整数のリストを持っている、とあなたは任意の整数> = 50は赤で表示したいとしましょう:

if(items.get(position) >= 50) { 
    myView.setBackgroundColor("#FF0000"); 
} else { 
    myView.setBackgroundColor("#000000"); 
} 

(これは他のケースを処理することを確認することが重要だ、など

カスタムアダプターを一度も作っていないのであれば、this excerpt from CommonsWare's bookを使ってみてください。カスタムListAdapterを作成することは素晴らしいリソースです。

EDIT:あなたのコメントに基づいてさらに考え、:カスタムで

ExpandableListAdapter

private Object lastSelectedObject; 

public void setLastSelectedObject(Object obj) { 
    lastSelectedObject = obj; 
} 

public Object getLastSelectedObject() { 
    return lastSelectedObject; 
} 

バックgetView()

Object obj = getLastSelectedObject(); 
if(obj != null) { 
    //handle background switching for your View here 
} else { 
    //reset background to default for recycled views 
} 
で、今

@Override 
protected void onListItemClick(ListView l, View v, int pos, long id) { 
    super.onListItemClick(l, v, pos, id); 
    ((CustomAdapter)l.getAdapter()).setLastSelectedObject(items.get(pos)); 
} 

あなたのListActivityでonListItemClick(ListView l, View v, int pos, long id)を実装

+0

私はカスタムのlistadapterを持っています(実際はカスタム 'expandableListAdapter'です)' groupPosition'、 'childPosition'、' convertView'と 'parentView'を受け取る' getChildView'を持っています。問題は、クリックされた最後の子ビューに基づいて背景を変更する必要があることです。このメソッドに何らかの 'onclicklistener'を張ることができますか?また、クリックしたビューを保存するにはどうしたらいいですか?ありがとう。 – yellavon

+0

ああ、私は参照してください。私はあなたのためのいくつかの提案を追加しました。基本的には、あなたのListAdapterにプライベート変数を追加して、最後にクリックされたアイテムを追跡します(アイテムクラスタイプが 'Object'のものであれば置き換えてください)。次に、アイテムがクリックされるたびに、そのアイテムを最後に選択したアイテムとして設定します。その後、あなたの 'getView()'で、オブジェクトを取得し、それに基づいてロジックを処理します。 – kcoppock

-1

アンドロイドのListViewクラスは弱いです。

あなたの質問に対する短い答えは簡単ではありません。

誰かがGoogle I/Oでそれについて尋ねました。アンドロイドチームからの回答は、垂直方向の塗りつぶしのLinearLayoutを使用して、子ビューのスタックを追加することでした(これは基本的にListViewと同じ機能です) 。

あなたは(X)ビュー

0

のいずれかがthis example

int first = view.getFirstVisiblePosition(); 
int count = view.getChildCount(); 
for (int i=0; i<count; i++) { 
    TextView t = (TextView)view.getChildAt(i); 
    if (t.getTag() != null) { 
     t.setText(mStrings[first + i]); 
     t.setTag(null); 
    } 
} 

を見てください取得するためでGetChildを行うことができますgetChildAtは、あなたが探している方法であるように思えます。

関連する問題