onitemclicklistenerを使用してリストビューアイテムにアクセスする方法を知っていますが、コード内で背景色を変更する方法は何ですか。リストビュー内の特定のビューを参照する方法
sudoのコード:
lv[0].setBackgroundResource(R.color.red); //change the background of the first listview item
は、リストビューの各ビューにアクセスする方法はありますか?
onitemclicklistenerを使用してリストビューアイテムにアクセスする方法を知っていますが、コード内で背景色を変更する方法は何ですか。リストビュー内の特定のビューを参照する方法
sudoのコード:
lv[0].setBackgroundResource(R.color.red); //change the background of the first listview item
は、リストビューの各ビューにアクセスする方法はありますか?
@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)
を実装
アンドロイドのListViewクラスは弱いです。
あなたの質問に対する短い答えは簡単ではありません。
誰かがGoogle I/Oでそれについて尋ねました。アンドロイドチームからの回答は、垂直方向の塗りつぶしのLinearLayoutを使用して、子ビューのスタックを追加することでした(これは基本的にListViewと同じ機能です) 。
あなたは(X)ビュー
のいずれかが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は、あなたが探している方法であるように思えます。
私はカスタムのlistadapterを持っています(実際はカスタム 'expandableListAdapter'です)' groupPosition'、 'childPosition'、' convertView'と 'parentView'を受け取る' getChildView'を持っています。問題は、クリックされた最後の子ビューに基づいて背景を変更する必要があることです。このメソッドに何らかの 'onclicklistener'を張ることができますか?また、クリックしたビューを保存するにはどうしたらいいですか?ありがとう。 – yellavon
ああ、私は参照してください。私はあなたのためのいくつかの提案を追加しました。基本的には、あなたのListAdapterにプライベート変数を追加して、最後にクリックされたアイテムを追跡します(アイテムクラスタイプが 'Object'のものであれば置き換えてください)。次に、アイテムがクリックされるたびに、そのアイテムを最後に選択したアイテムとして設定します。その後、あなたの 'getView()'で、オブジェクトを取得し、それに基づいてロジックを処理します。 – kcoppock