為ListView同時設置點擊時的背景和點擊松手之后的背景
來源:程序員人生 發布時間:2014-10-09 02:57:40 閱讀次數:2281次
本例要達到的效果是,
(1)點擊ListView的item時會有指定的背景,
(2)松手之后,剛才點擊的item也會有指定的背景
實現(1)很簡單:在xml中為ListView設置listSelector即可。
<ListView
android:id="@+id/pop_listview_left"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none"
android:divider="@color/popup_left_bg"
android:dividerHeight="1dp"
android:listSelector="@color/popup_right_bg"
android:scrollingCache="false"
/>
實現(2)也很簡單,在adapter中動態改變背景:
if (position == selectedPosition){
convertView.setBackgroundResource(R.color.left_selected);
}else{
convertView.setBackgroundResource(R.color.left_normal);
}
并且在該ListView的點擊事件中及時更新selectedPosition:
leftLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//更新背景色
FirstClassAdapter adapter = (FirstClassAdapter) (parent.getAdapter());
adapter.setSelectedPosition(position);
adapter.notifyDataSetChanged();
}
});
可是,問題出來了:設置了(2)之后,(1)的效果沒了!!!
這是因為,在設置
convertView.setBackgroundResource(R.color.left_selected);
時,(1)中listSelector中指定的顏色會被覆蓋。
解決方法有兩種:
(一)
將convertView的一個純色的背景改為一個selector,并設置其在點擊時的顏色為透明(這樣下面listSelector的顏色就露出來了)。以下是selector_left_normal.xml和selector_left_selected.xml.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@android:color/transparent"/>
<item android:state_pressed="false"
android:drawable="@color/popup_left_bg"/>
</selector>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@android:color/transparent"/>
<item android:state_pressed="false"
android:drawable="@color/popup_right_bg"/>
</selector>
然后將(2)中的代碼改為:
if (position == selectedPosition){
convertView.setBackgroundResource(R.drawable.selector_left_selected);
}else{
convertView.setBackgroundResource(R.drawable.selector_left_normal);
}
(二)
參照(一),將ListView的listSelector屬性去掉,并將其顏色復制到上面兩個selector中替換transparent那個顏色。
也就是說,每次點擊ListView的條目之后,設置背景色時,
(a)如果該條目現在是選中狀態,則直接設為某一個顏色
(b)否則,將其顏色設置為一個selector,并在selector中分別指定點擊和沒有點擊時的顏色。
問題圓滿解決。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈