源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Android实现为ListView同时设置点击时的背景和点击松手之后的背景

  • 时间:2020-02-03 17:00 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android实现为ListView同时设置点击时的背景和点击松手之后的背景
本文实例讲述了Android实现为ListView同时设置点击时的背景和点击松手之后的背景。分享给大家供大家参考。具体分析如下: 这里要达到的效果是, (1)点击ListView的item时会有指定的背景, (2)松手之后,刚才点击的item也会有指定的背景 实现(1)很简单:在xml中为ListView设置listSelector即可。
[u]复制代码[/u] 代码如下:
<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中动态改变背景:
[u]复制代码[/u] 代码如下:
if (position == selectedPosition){      convertView.setBackgroundResource(R.color.left_selected); }else{      convertView.setBackgroundResource(R.color.left_normal); }
并且在该ListView的点击事件中及时更新selectedPosition:
[u]复制代码[/u] 代码如下:
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)的效果没了!!! 这是因为,在设置
[u]复制代码[/u] 代码如下:
convertView.setBackgroundResource(R.color.left_selected);
  时,(1)中listSelector中指定的颜色会被覆盖。 解决方法有两种: (一) 将convertView的一个纯色的背景改为一个selector,并设置其在点击时的颜色为透明(这样下面listSelector的颜色就露出来了)。以下是selector_left_normal.xml和selector_left_selected.xml.
[u]复制代码[/u] 代码如下:
<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)中的代码改为:
[u]复制代码[/u] 代码如下:
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中分别指定点击和没有点击时的颜色。 问题圆满解决。 希望本文所述对大家的Android程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部