Android实现为ListView同时设置点击时的背景和点击松手之后的背景
本文实例讲述了Android实现为ListView同时设置点击时的背景和点击松手之后的背景。分享给大家供大家参考。具体分析如下:
这里要达到的效果是,
(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(newAdapterView.OnItemClickListener(){ @Override publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,longid){ //更新背景色 FirstClassAdapteradapter=(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.
<selectorxmlns:android="http://schemas.android.com/apk/res/android"> <itemandroid:state_pressed="true" android:drawable="@android:color/transparent"/> <itemandroid:state_pressed="false" android:drawable="@color/popup_left_bg"/> </selector>
<selectorxmlns:android="http://schemas.android.com/apk/res/android"> <itemandroid:state_pressed="true" android:drawable="@android:color/transparent"/> <itemandroid:state_pressed="false" android:drawable="@color/popup_right_bg"/> </selector>