如何使listView中的一行始终具有相同的颜色android
Posted
技术标签:
【中文标题】如何使listView中的一行始终具有相同的颜色android【英文标题】:How to make a line in the listView always have the same color android 【发布时间】:2020-11-26 13:34:51 【问题描述】:我有自定义列表视图:
public class CustomView extends View
private String[] hoursList = getResources().getStringArray(R.array.hours); ;
private String[] minutesList = getResources().getStringArray(R.array.minutes);;
private ListView listView;
private HourAdapter hourAdapter;
private MinuteAdapter minuteAdapter;
public CustomView(Context context)
super(context);
public CustomView(Context context, ViewGroup viewGroup)
super(context);
inflate(context, R.layout.time_picker_test, viewGroup);
listView = viewGroup.findViewById(R.id.minutes_list);
minuteAdapter = new MinuteAdapter(context, minutesList);
listView.setAdapter(minuteAdapter);
listView = viewGroup.findViewById(R.id.hours_list);
hourAdapter = new HourAdapter(context, hoursList);
listView.setAdapter(hourAdapter);
和适配器类:
public class MinuteAdapter extends BaseAdapter
private LayoutInflater lInflater;
private String[] minutesValueList;
public MinuteAdapter(Context context, String[] minutesValueList)
lInflater = LayoutInflater.from(context);
this.minutesValueList = minutesValueList;
@Override
public int getCount()
return minutesValueList.length;
@Override
public Object getItem(int position)
return minutesValueList[position];
@Override
public long getItemId(int position)
return position;
@Override
public View getView(int position, View convertView, ViewGroup parent)
View view = convertView;
if (view == null)
view = lInflater.inflate(R.layout.row, parent, false);
TextView textMinutes = view.findViewById(R.id.textRow);
textMinutes.setText(minutesValueList[position]);
if (view.getVisibility() == View.VISIBLE)
if (position ==2)
view.setBackgroundColor(Color.BLUE);
else
view.setBackgroundColor(Color.WHITE);
TextView textMinutes = view.findViewById(R.id.textRow);
textMinutes.setText(minutesValueList[position]);
return view;
我需要,这里(见图)在中间位置(现在是 11,2 和 PM)始终是蓝色(无论当前处于该位置的元素是什么)。 我用这个:
if (view.getVisibility() == View.VISIBLE)
if (position ==2)
view.setBackgroundColor(Color.BLUE);
else
view.setBackgroundColor(Color.WHITE);
但它会改变元素的颜色。但我需要只有单元格(可见元素的中间)始终是蓝色的。
【问题讨论】:
我不明白,你想让中间行的中间单元格为蓝色并保持原样吗? @aryan agarwal 完全正确!这是我需要的 【参考方案1】:如果您希望中间行的中间单元格为蓝色,请将 if (position ==2)
更改为 if (position ==1)
,数组中的索引从零开始而不是从 1
【讨论】:
对不起,也许我的问题不太正确......我需要那个单元格,现在 11,2,PM 总是蓝色的。当我们滚动并且有其他位置时,这个单元格必须是蓝色的。 好吧,我不知道该怎么做,但如果没问题,那么我可以建议你在中间元素后面放置一个蓝色布局,然后将你的列表视图放在上面,然后你会得到你想要的结果 #aryan agarwal 你能解释一下吗? 在您的 xml 布局中创建一个蓝色容器并将您的列表视图放在上面,这样蓝色将保持固定,您的功能将照常,这只是一个 hack 我相信你可以在列表视图中添加一个滚动监听器获取 firstvisible+1 位置并将其背景颜色设置为蓝色,或者将其设置为可点击,请参阅此链接***.com/a/35911911/8719734以上是关于如何使listView中的一行始终具有相同的颜色android的主要内容,如果未能解决你的问题,请参考以下文章
如何使网格列表中的每一行具有相同数量的项目(使用 Flexbox)? [复制]
如何在 ListView 中正确更改特定行的背景颜色? (安卓)