ListView点击后改变item颜色的Demo

在项目中,需要写一个效果,即listview中的item被点击后,颜色变灰(初始颜色为黑色),在网上找了许多的帖子,都没有详细的代码解决方法,只是说出了大概的思路,通过Map或者List集合,来记录当前点击的item,但是后面怎么继续,却没有下文,于是只能自己研究。

      结合网络上找到的资源,已经通过Map记录了当前点击的item,那么Map<Integer,Boolean>记录方式可以定义为当前点击的position 和当前item的boolean状态,具体代码如下


//声明

 private Map<Integer, Boolean> m;



    public Myadapter(Context context, Map<Integer, Boolean> map) {
        this.mInflater = LayoutInflater.from(context);
        this.m = map;
        m = new HashMap<Integer, Boolean>();

    }
//给Map添加方法,在MainActivity中调用,直接添加数据
    public Map<Integer, Boolean> getMap(Integer position, Boolean flag) {
        m.put(position, flag);
        return m;
    }

在GetView方法里面,根据Map中Boolean的值 来设置
    public View getView(int position, View convertView, ViewGroup parent) {

        convertView = mInflater.inflate(R.layout.adapter, null);


//设置文本并设置默认颜色

        TextView tv = (TextView) convertView.findViewById(R.id.tv);
        tv.setText(name[position]);
        tv.setTextColor(Color.RED);

        boolean flag = true;


 //根据m.get()方法,获取position对应的values,并对item重新设置内容及颜色

 try {
            if (flag != m.get(position)) {
                tv.setTextColor(Color.GREEN);
                tv.setText("我被点过了");
            }
        } catch (NullPointerException e) {

        }


        return convertView;
    }


在MainAcitivity中给listview添加itemClick监听的代码





public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//添加
    adapter.getMap(position,false);
//刷新
    adapter.notifyDataSetChanged();


}


static class ViewHolder {

        public TextView tv;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        boolean flag = true;
        ViewHolder holder;
        //如果缓存convertView为空,则需要创建View
        if (convertView == null) {
            holder = new ViewHolder();
            //根据自定义的Item布局加载布局
            convertView = mInflater.inflate(R.layout.adapter, null);

            holder.tv = (TextView) convertView.findViewById(R.id.tv);
            //将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.tv.setText(name[position]);

        try {
            if (flag != m.get(position)) {
                holder.tv.setTextColor(Color.RED);
            }
        } catch (NullPointerException e) {

        }


        return convertView;
    }


为优化lisview, getView 用以下代码来写








关键代码已经贴出来了,具体DEMO在这里



点击打开链接



阅读更多
文章标签: android listview 点击
个人分类: 小白编程
想对作者说点什么? 我来说一句

listview点击改变item颜色

2015年12月09日 6.36MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭