listView 點擊後變色 擡起後保持顏色

常常遇到這樣的需求,一個listView 的某一個 item 按下去變色,彈起後 顏色保持,而後按其餘的item變色,彈起後保持,與此同時前一個點擊的item顏色恢復。實現不難,這裏整理一下 :html

1 首先是 定義 item的 selector     \drawable\listview_item_pressed.xmljava

[html] view plain copy print?android

  1. <?xml version="1.0" encoding="UTF-8"?>  web

  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">  ide

  3.     <item  佈局

  4.         android:state_pressed="true"  spa

  5.         android:drawable="@drawable/listview_item_selected_bg" />  .net

  6.     <item  orm

  7.         android:state_pressed="false"  xml

  8.         android:drawable="@drawable/listview_unseleceted" />  

  9. </selector>  

 

2 把selector 添加入 item ,這裏採用的是 添加進 item 採用的佈局文件中

[html] view plain copy print?

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  

  2.     android:layout_width="fill_parent"  

  3.     android:background="@drawable/listview_item_pressed"  

  4.     android:orientation="horizontal"  

  5.     android:layout_height="56dp">...  


3 在 適配器中 getView 方法裏 添加 點擊事件,也能夠在 listView 中的 onItemClick()方法中處理

  

[java] view plain copy print?

  1. convertView.setTag(position);  

  2.    convertView.setOnClickListener(new View.OnClickListener() {  

  3.          

  4.        @Override  

  5.        public void onClick(View v) {  

  6.            // TODO Auto-generated method stub  

  7.            if(oldView == null){  

  8.                //第一次點擊   

  9.                oldView = v;  

  10.                v.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.listview_item_selected_bg));  

  11.            }else{  

  12.                //非第一次點擊   

  13.                //把上一次點擊的 變化  

  14.                oldView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.list_pressed));                     

  15.            v.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.listview_item_selected_bg));       

  16.                //保存oldView          

  17.              oldView = v;  

  18.            }  

  19.              

  20.        }  

  21.    });  

  22.      

  23.    if(oldView != null && (position == (Integer)oldView.getTag())){// 爲點擊 item  

  24.        convertView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.listview_item_selected_bg));  

  25.    }else{  

  26.       convertView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.list_pressed));      

  27.     } 

相關文章
相關標籤/搜索