首页 > 代码库 > android listview 触摸改变颜色直至下一次触摸恢复(包含层叠颜色显示)

android listview 触摸改变颜色直至下一次触摸恢复(包含层叠颜色显示)

基本的思路是,在实体类中保存颜色的值或者是保存是否选中的状态(boolean),把实体的类的列表传入BaseAdapter然后调用listview实例的notifyDataSetChanged()方法进行动态更新数据。

包含两种方式(第二种是转的)

下面是一个实例:



ListViewItem:实体类

package cn.com.demotest.entity;

public class ListViewItem {
	private String name;
	private String result;
	private int colorData = http://www.mamicode.com/0;>
ListViewAdapter:BaseAdapter

package com.example.testdemo;

import java.util.List;

import cn.com.demotest.entity.ListViewItem;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

public class ListViewAdapter extends BaseAdapter {
	private Context context;
	private List<ListViewItem> data;
	private LayoutInflater inflater;
	private int colorPageId = 0;
	public ListViewAdapter(Context context,List<ListViewItem> data)
	{
		this.context = context;
		this.data = http://www.mamicode.com/data;>
MainActivity:

package com.example.testdemo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import cn.com.demotest.entity.ListViewItem;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class MainActivity extends Activity {

	private  ListView  listview;
	List<ListViewItem> data;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
      ArrayList<HashMap<String, Object>>  map=new ArrayList<HashMap<String,Object>>();
        
        listview=(ListView) findViewById(R.id.listview);
        data = http://www.mamicode.com/new ArrayList();>
activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/textView"
        android:textSize="20dp"
        />
  <ListView 
      android:id="@+id/listview"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">
      
  </ListView>
    
    <Button 
        android:id="@+id/test"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="hoadshfo"/>
    
    
</LinearLayout>

item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:textSize="10dp" />

    <TextView
        android:id="@+id/result"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="7" />

</LinearLayout>


下面一种方法更加简便,我是转的:

最近项目ListView浏览时候用改变颜色来记录选中行,网上Baidu,Google了好久,最后结合网上资料和自己的实践,

终于成功实现了功能!效果图如下:

具体的代码如下:

1、ListView的代码:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3. android:orientation="vertical"  
  4. android:layout_width="fill_parent"  
  5. android:layout_height="fill_parent">  
  6. <include layout="@layout/title_left_button"/>  
  7. <RelativeLayout   
  8.     android:orientation="vertical" android:layout_width="fill_parent"  
  9.     android:layout_height="fill_parent">  
  10.     <include android:id="@+id/cusExp_Item_progress" layout="@layout/progress"/>     
  11.     <com.jemsn.util.ScrollListView_ExpView  
  12.         android:id="@+id/CusExp_items_Detail"  
  13.         android:layout_width="fill_parent"        
  14.         android:layout_height="fill_parent"  
  15.         android:listSelector="@android:color/transparent"     
  16.              android:cacheColorHint="#00000000"           
  17.             <span style="color:#cc0000;"> android:focusableInTouchMode="true"   
  18. </span>     />   
  19.       
  20. </RelativeLayout>    
  21. </LinearLayout>  

其中加红色的一定要加上去,否则得不到我们想要的效果!

2、DataAdpter 的代码如下:

[java] view plaincopy
  1. class ScrollListViewAdapter extends BaseAdapter {  
  2.         List<CustomerExpItem> newsItems;  
  3.         public ScrollListViewAdapter(List<CustomerExpItem> newsitems) {  
  4.             this.newsItems = newsitems;  
  5.         }  
  6.         @Override  
  7.         public int getCount() {  
  8.             return newsItems.size();  
  9.         }  
  10.         @Override  
  11.         public Object getItem(int position) {  
  12.             return newsItems.get(position);  
  13.         }  
  14.         @Override  
  15.         public long getItemId(int position) {  
  16.             return position;  
  17.         }  
  18.         public View getView(int position, View convertView, ViewGroup parent) {  
  19.             LinearLayout view = new LinearLayout(getApplicationContext());  
  20.             view.setOrientation(LinearLayout.HORIZONTAL);  
  21.             ViewHolder viewHolder=null;  
  22.             if (convertView == null) {  
  23.                 viewHolder = new ViewHolder();    
  24.                 // 固定的列  
  25.                 View viewFix = getLayoutInflater().inflate(  
  26.                         R.layout.expdetail_list_fix_items, parent, false);  
  27.                 // 可以滑动的列(Layout的根布局必须是LinearLayout,原因不明)  
  28.                 View viewMovable = getLayoutInflater().inflate(  
  29.                         R.layout.expdetail_list_movable_items, parent, false);  
  30.                 view.addView(viewFix);  
  31.                 view.addView(viewMovable);  
  32.                 viewHolder.fixTxt01 = (TextView) view  
  33.                         .findViewById(R.id.Exp_detail_SheetCode);  
  34.                 viewHolder.fixTxt02 = (TextView) view  
  35.                         .findViewById(R.id.Exp_detail_SheetDate);  
  36.                 view.setTag(viewHolder);  
  37.             } else {  
  38.                 view = (LinearLayout) convertView;  
  39.                 viewHolder = (ViewHolder) view.getTag();   
  40.             }  
  41.             viewHolder.fixTxt01.setText(newsItems.get(position).get_GdsName());  
  42.             viewHolder.fixTxt02.setText(newsItems.get(position).get_GdsCode());  
  43.                         mArrayListMovable.add(view.getChildAt(1));  
  44.             if (position == selectItem) {  
  45.                 viewHolder.fixTxt01.setTextColor(Color.GREEN);  
  46.                 viewHolder.fixTxt02.setTextColor(Color.GREEN);  
  47.                                   
  48.             } else {  
  49.                 viewHolder.fixTxt01.setTextColor(Color.WHITE);  
  50.                 viewHolder.fixTxt02.setTextColor(Color.parseColor("#40e0d0"));  
  51.                             }  
  52.             return view;  
  53.         }  
  54.   
  55.         public void addNewsItem(CustomerExpItem newsitem) {  
  56.             newsItems.add(newsitem);  
  57.         }  
  58.            <span style="color:#ff6666;"public  void setSelectItem(int selectItem) {    
  59.                    this.selectItem = selectItem;    
  60.                 }    
  61.                  private int  selectItem=-1;   
  62. </span> }     
  63.   
  64. }  

其中红色的为关键的代码。

3、ListView行点击,选中的代码:

[java] view plaincopy
  1. AdapterView.OnItemClickListener mLeftListOnItemClick = new AdapterView.OnItemClickListener() {    
  2.         public void onItemClick(AdapterView<?> arg0, View view, int arg2,long arg3) {      
  3.             adapter.setSelectItem(arg2);    
  4.             adapter.notifyDataSetInvalidated();     };  

好了我们只要再注册一下ListView的点击事件就可以了!我们还可以添加自己比如更换图片之类!

参考自:http://blog.csdn.net/zz_mm/article/details/7513391