Android ListFragment中SimpleAdapter隔行变色失效,求简便解决方法
解决列表隔行变色的问题
嘿,我来帮你搞定这个列表隔行变色的问题~你的代码没生效主要有几个小问题,咱们一步步捋清楚:
你的代码存在的问题
- 没有正确获取/初始化View:在
getView方法里,你直接操作传入的v,但当v为null(也就是第一次加载该行或者没有可复用的View时),这样操作会导致空指针,而且也没利用好SimpleAdapter的View复用机制。你需要先调用super.getView()拿到正确的View实例。 - 颜色值格式错误:你写的
920000是十进制数值,但Android中颜色是ARGB格式的int值,正确的写法应该是十六进制,比如0xFF920000(前面的FF代表完全不透明的透明度)。 - 未重置奇数行的背景色:如果只给偶数行设置颜色,当View被复用时,奇数行可能会保留之前复用的偶数行的颜色,导致显示异常,所以奇数行也要明确设置默认背景色。
修正后的代码
new SimpleAdapter(Activity.this, listElements, R.layout.list, new String[]{"dt", CONTENT, TIMESTAMP}, new int[]{R.drawable.dt, R.id.content, R.id.timestamp}) { @Override public View getView(int position, View convertView, ViewGroup parent) { // 先调用super获取已初始化或复用的View View v = super.getView(position, convertView, parent); // 根据位置设置背景色 if (position % 2 == 0) { // 偶数行设置自定义颜色(注意用ARGB十六进制) v.setBackgroundColor(0xFF920000); } else { // 奇数行设置默认背景色,比如白色或者你的列表默认背景 v.setBackgroundColor(Color.WHITE); } return v; } };
其他更简便的方案
如果你觉得在Adapter里写逻辑有点麻烦,还可以试试这些方法:
- 使用Drawable Selector:创建一个
list_item_bg.xml放在drawable目录下,通过自定义状态区分奇偶行(不过对于ListView的SimpleAdapter来说,还是上面的方法更直接)。 - 如果后续切换到RecyclerView:可以自定义
ItemDecoration,在onDraw方法中给奇偶行绘制背景,这样Adapter的代码会更干净。
内容的提问来源于stack exchange,提问作者greencucumber1
相关产品推荐
相关产品推荐

