<学习笔记>Android ListView 通过指定position改变item颜色

本文介绍如何在不依赖点击事件或选中状态的情况下,根据ListView中item的位置改变其颜色。通过在数据中添加一个标识字段,并在Adapter的getView()方法中根据该字段值设置item背景色,实现动态颜色变化。当需要更新颜色时,更改数据并调用notifyDataSetChanged()。
摘要由CSDN通过智能技术生成

ListView中点击每个item是可以通过setOnItemClickListener获取到View和position改变颜色的,也可以直接设置某个item为setSelection()选中状态来改变背景色。

但是如果我并不想设置item为选中,也不想通过点击item,而单纯只是想通过item在listview中的位置改改颜色呢?又或许我其它逻辑需要BlaBla。。。

通过ListView的getChildAt()勉强可以通过position获取到View来变色,但是众所周知getChildAt()只能获取到listView中可见的视图,对于那些out of屏幕的item怎么办?我给的position可是在整个ListView中的位置,可不只是可见视图中的位置啊。

没办法,只有重写Adapter的getView方法了。

基本思路:

1.在数据中添加一个boolean成员来判断用哪种颜色,例如isblue(蓝色?)

2.覆盖getView()。在getView()中根据isblue的值来设置item的背景颜色为蓝色或白色

3.每当我需要改变颜色时,改变数据中的isblue值,并且用Adapter的notifyDataSetChange()刷新数据

protected ListView mListView;
protected SimpleAdapter mAdapter;
protected List<Map<String,Object>> mList = new ArrayList<>();

protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);

	mListView = (ListVi
改变ListView中特定项的背景颜色,您可以使用自定义适配器来为每个项设置不同的背景颜色。以下是一个示例: 1. 创建自定义适配器MyAdapter: ```java public class MyAdapter extends ArrayAdapter<String> { private int[] colors; public MyAdapter(Context context, int resource, List<String> objects) { super(context, resource, objects); colors = new int[objects.size()]; Arrays.fill(colors, Color.WHITE); // 默认所有项的背景颜色为白色 } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); view.setBackgroundColor(colors[position]); // 设置指定项的背景颜色 return view; } public void setColor(int position, int color) { colors[position] = color; notifyDataSetChanged(); // 刷新列表 } } ``` 2. 在Activity中使用自定义适配器: ```java public class MainActivity extends AppCompatActivity { private ListView listView; private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = findViewById(R.id.list_view); adapter = new MyAdapter(this, android.R.layout.simple_list_item_1, Arrays.asList("Item 1", "Item 2", "Item 3")); listView.setAdapter(adapter); // 点击列表项改变其背景颜色 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { adapter.setColor(position, Color.YELLOW); } }); } } ``` 在上述示例中,我们使用自定义适配器MyAdapter为ListView设置不同的背景颜色,并在Activity中通过设置ItemClickListener来改变指定项的背景颜色。您可以根据自己的需求修改自定义适配器的代码,以适应不同的场景。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值