如何使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)? [复制]

winform中修改ListView选中项颜色

如何在 ListView 中正确更改特定行的背景颜色? (安卓)

如何在颤动中使设备顶部面板(状态栏)具有与 AppBar 相同的背景颜色?

如何使水平条组具有相同的颜色?

Android如何在点击时使视图突出显示?