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

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

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

下面是一个实例:



ListViewItem:实体类

package cn.com.demotest.entity;

public class ListViewItem {
	private String name;
	private String result;
	private int colorData = 0;
	public ListViewItem(String name, String result, int colorData)
	{
		this.name = name;
		this.result = result;
		this.colorData = colorData;
	}
	public int getColorData() {
		return colorData;
	}
	public void setColorData(int colorData) {
		this.colorData = colorData;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getResult() {
		return result;
	}
	public void setResult(String result) {
		this.result = result;
	}
}

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 = data;
		inflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return this.data.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return data.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent)
	{
		
		LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.item,null);
		TextView name = (TextView) layout.findViewById(R.id.name);
		TextView result = (TextView) layout.findViewById(R.id.result);
		ListViewItem item = data.get(position);
		name.setText(item.getName());
		result.setText(item.getResult());
		int nameColor = 0;
		int resultColor = 0;
		if(colorPageId == 0)
		{
			nameColor = Color.BLUE;
			colorPageId = 1;
		}
		else if(colorPageId == 1)
		{
			nameColor = Color.GREEN;
			colorPageId = 0;
		}
		name.setTextColor(nameColor);//这里的颜色可以自己动态的设置,可以用Color对象里的颜色值,也可以用R.color里的颜色。
		result.setTextColor(item.getColorData());
		
		return layout;
	}
    public List<ListViewItem> getData() {
        return data;
    }
    public void setData(List<ListViewItem> data) {
        this.data = 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 = new ArrayList<ListViewItem>();
        data.add(new ListViewItem(this.getResources().getString(R.string.name),
        		this.getResources().getString(R.string.result),Color.GREEN));
        data.add(new ListViewItem(this.getResources().getString(R.string.name),
        		this.getResources().getString(R.string.result),Color.BLUE));
        
        data.add(new ListViewItem(this.getResources().getString(R.string.name),
        		this.getResources().getString(R.string.result),Color.YELLOW));
        
        data.add(new ListViewItem(this.getResources().getString(R.string.name),
        		this.getResources().getString(R.string.result),Color.RED));
        
        data.add(new ListViewItem(this.getResources().getString(R.string.name),
        		this.getResources().getString(R.string.result),Color.CYAN));
        listview.setAdapter(new ListViewAdapter(MainActivity.this, data));
        
        Button button = (Button) findViewById(R.id.test);
        button.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                ListViewAdapter adapter = (ListViewAdapter) listview.getAdapter();
                ListViewItem listViewItem = data.get(0);
                listViewItem.setColorData(Color.RED);
                data.set(0,listViewItem);
                adapter.setData(data);
                adapter.notifyDataSetChanged();
               
            }
        });
    }
}

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 plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns: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. <includelayout="@layout/title_left_button"/>
  7. <RelativeLayout
  8. android:orientation="vertical"android:layout_width="fill_parent"
  9. android:layout_height="fill_parent">
  10. <includeandroid: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. <spanstyle="color:#cc0000;">android:focusableInTouchMode="true"
  18. </span>/>
  19. </RelativeLayout>
  20. </LinearLayout>

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

2、DataAdpter 的代码如下:

[java] view plain copy
  1. classScrollListViewAdapterextendsBaseAdapter{
  2. List<CustomerExpItem>newsItems;
  3. publicScrollListViewAdapter(List<CustomerExpItem>newsitems){
  4. this.newsItems=newsitems;
  5. }
  6. @Override
  7. publicintgetCount(){
  8. returnnewsItems.size();
  9. }
  10. @Override
  11. publicObjectgetItem(intposition){
  12. returnnewsItems.get(position);
  13. }
  14. @Override
  15. publiclonggetItemId(intposition){
  16. returnposition;
  17. }
  18. publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
  19. LinearLayoutview=newLinearLayout(getApplicationContext());
  20. view.setOrientation(LinearLayout.HORIZONTAL);
  21. ViewHolderviewHolder=null;
  22. if(convertView==null){
  23. viewHolder=newViewHolder();
  24. //固定的列
  25. ViewviewFix=getLayoutInflater().inflate(
  26. R.layout.expdetail_list_fix_items,parent,false);
  27. //可以滑动的列(Layout的根布局必须是LinearLayout,原因不明)
  28. ViewviewMovable=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. }else{
  48. viewHolder.fixTxt01.setTextColor(Color.WHITE);
  49. viewHolder.fixTxt02.setTextColor(Color.parseColor("#40e0d0"));
  50. }
  51. returnview;
  52. }
  53. publicvoidaddNewsItem(CustomerExpItemnewsitem){
  54. newsItems.add(newsitem);
  55. }
  56. <spanstyle="color:#ff6666;">publicvoidsetSelectItem(intselectItem){
  57. this.selectItem=selectItem;
  58. }
  59. privateintselectItem=-1;
  60. </span>}
  61. }

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

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

[java] view plain copy
  1. AdapterView.OnItemClickListenermLeftListOnItemClick=newAdapterView.OnItemClickListener(){
  2. publicvoidonItemClick(AdapterView<?>arg0,Viewview,intarg2,longarg3){
  3. adapter.setSelectItem(arg2);
  4. adapter.notifyDataSetInvalidated();};

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值