Furudateのブログ

プログラミングやネットワーク系の知識・技術がメインのブログ。技術メモ帳的な感じになるかと。岩手から発信していきます。

【Android】ListViewで項目を選択したときに背景色を変える

こんばんは。

前回の記事では、ListViewの使い方を載せました。

その際に、ソースコードにはちらっと背景色を交互に変える方法も載せていました。
しかし、背景色を変えると項目をタッチしたときに色が変化しなくなってしまい、タッチしたかどうかがわかりづらくなってしまいます。

それを解決するために、項目を選択したときに色を変える方法を紹介します。
なお、こちらの記事を参考にしながらやると分かりやすいと思います。

それでは、以下ソースコードです。


まず、項目を選択したときとそうでないときの色を指定するxmlファイルを res/drawable に作成します(今回は交互に色が違うので、2種類用意しました。listitem_color1とlistitem_color2です)。

res/drawable/listitem_color1(color2も色が違うだけです)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- itemが押された時 -->
    <item android:state_pressed="true"
        android:drawable="@color/khaki" />
    
    <!-- itemが押されてない時 -->
    <item android:state_pressed="false"
        android:drawable="@color/darkorange" /> 

</selector>

次にActivity(ListFragment)のほうです。
前回の記事で背景色を交互に指定するために View getView をオーバーライドしているところがあります。
そこを次のように変更します。

MainActivity(Fragment)

@Override
public View getView(int position, View convertView, ViewGroup parent){
	View view = super.getView(position, convertView, parent);
	
	if (position % 2 == 0){
		view.setBackgroundResource(R.drawable.listitem_color1);
	}else{
		view.setBackgroundResource(R.drawable.listitem_color2);
	}
	
	return view;
}


これで項目を選択した際に色を指定したものに変更できます。
なお、文字列も変更する場合は参考サイトを見ると良いと思います。

それでは。