博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态改变Listview的item背景颜色和item中字体的颜色
阅读量:5102 次
发布时间:2019-06-13

本文共 3188 字,大约阅读时间需要 10 分钟。

首先非常感谢原文章作者。

今天项目用到Listview点击item变色。网上找了好久,都没有找到简单的方法,好像只能重写getview();

网上找到了一个比较简单的例子,但是不懂为什么,先记录下来以后慢慢学习。

package leoli.com.focuslistview;import android.graphics.Color;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {private ListView mListView;    private List
list=new ArrayList
(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView= (ListView) this.findViewById(R.id.listview); for (int i=0;i<10;i++){ list.add("你好"+i); } final MyAdapter adapter=new MyAdapter(); mListView.setAdapter(adapter); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView
adapterView, View view, int i, long l) { adapter.setCurrentItem(i); adapter.setClick(true); adapter.notifyDataSetChanged(); } }); } class MyAdapter extends BaseAdapter{ private int mCurrentItem=0; private boolean isClick=false; @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { if (view==null){ view= LayoutInflater.from(MainActivity.this).inflate(R.layout.listview_item,null); } TextView textView= (TextView) view.findViewById(R.id.test); LinearLayout parent= (LinearLayout) view.findViewById(R.id.ll_parent); textView.setText(list.get(i)); if (mCurrentItem==i&&isClick){ parent.setBackgroundColor(Color.parseColor("#3F51B5")); textView.setTextColor(Color.parseColor("#ff6600")); }else{ parent.setBackgroundColor(Color.parseColor("#ffffff")); textView.setTextColor(Color.parseColor("#000000")); } return view; } public void setCurrentItem(int currentItem){ this.mCurrentItem=currentItem; } public void setClick(boolean click){ this.isClick=click; } }}

下面是原文章的讲解:

我们都知道,Listview每生成一个item都会执行一次getview().所以我们在Adapter中加入了两个字段,这两个字段是用来判断当前的item的position和该item有无被点击的.mCurrentItem的初始值为0,所以在不断执行getview()时就进行了各个item项的position与mCurrentItem进行对比.最后通过if语句来执行对比后的设置.在我们的Activity中,我们调用了Adapter中的两个对外开放的方法分别是设置点击事件和设置当前的item项的position.最后再调用Adapter的notifyDatasetChanged().刷新Listview.

原文章链接:

转载于:https://www.cnblogs.com/zrdm/p/7339489.html

你可能感兴趣的文章
SSH访问远程主机超时问题解决
查看>>
场景调研
查看>>
1.4 循环语句 & 方法
查看>>
2017-2018-1 20155315 《信息安全系统设计基础》实验五 通讯协议设计
查看>>
nginx基础
查看>>
MATLAB模型预测控制(MPC,Model Predictive Control)
查看>>
使用ViewFlipper实现广告图片的自动轮播的效果
查看>>
SurfaceView双缓冲技术引入
查看>>
linux基本知识2
查看>>
java常见的面试题
查看>>
.NET 获取类型中的属性
查看>>
ACM错误
查看>>
[LeetCode] Combination Sum II 组合之和之二
查看>>
面试被虐
查看>>
js+面向对象相关笔记(一)
查看>>
校外实习-第三周总结
查看>>
orcl数据库先决条件检查时失败
查看>>
设计模式 代理模式(Proxy Pattern)
查看>>
CodeUI Test:UIMap录制文件分析一
查看>>
.net的数据类型说明
查看>>