如何在listview android中仅更改第二个单元格的背景颜色

Posted

技术标签:

【中文标题】如何在listview android中仅更改第二个单元格的背景颜色【英文标题】:How can I change the background color of only the second cell in listview android 【发布时间】:2020-12-04 17:44:54 【问题描述】:

如何仅更改列表视图中第二个可见单元格的背景颜色?我只想更改列表视图中第二个可见单元格的背景颜色。有没有办法做到这一点。 我的适配器类:

public class HourAdapter extends BaseAdapter 
        private LayoutInflater lInflater;
        private String[] hoursValueList;
    
        public HourAdapter(Context context, String[] hoursValueList
            lInflater = LayoutInflater.from(context);
            this.hoursValueList = hoursValueList;
        

        @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 textHours = view.findViewById(R.id.textRow);
            textHours.setText(hoursValueList[position]);
            
            if (position == CustomView.middlePosition) 
              view.setBackgroundResource(R.drawable.selected_color);
            
    
            return view;
        
    

和 customView 类:

public class CustomView extends View  

private String[] hoursList = getResources().getStringArray(R.array.hours); 
private ListView listView;
private HourAdapter hourAdapter;
public static int middlePosition;

public CustomView(Context context) 
        super(context);
    

    public CustomView(Context context, ViewGroup viewGroup) 
        super(context);
        inflate(context, R.layout.custom_test, viewGroup);

   
        listView = viewGroup.findViewById(R.id.hours_list);
        hourAdapter = new HourAdapter(context, hoursList);
        listView.setAdapter(hourAdapter);

        listView.setOnScrollListener(new AbsListView.OnScrollListener() 

                                         @Override
                                         public void onScrollStateChanged(AbsListView view, int scrollState) 
                                         

                                         @Override
                                         public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 
                                          middlePosition = firstVisibleItem+1;

                                         
                                     
        );

当我在 ListView 上向下滚动时,ListView 的其他行也改变了背景颜色。

我只想更改 ListView 的第二行。

【问题讨论】:

【参考方案1】:

我猜你的意思是你想为从顶部开始的第二个可见项目而不是列表中的第二个项目着色。

如果是这种情况,您可以简单地将 else 语句添加到适配器类的 getView 方法中,以从不在第二个可见项目位置的文本视图中删除背景。您的代码将如下所示:

@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 textHours = view.findViewById(R.id.textRow);
        textHours.setText(hoursValueList[position]);
        
        if (position == 1) 
          view.setBackgroundResource(R.drawable.selected_color);
        

        return view;
    

【讨论】:

#Julian Schweppe ,你看,我需要将在第二个可见位置的每个元素都有另一种颜色。 你有图片应该是什么样子的吗? #Julian Schweppe 看来我找到了解决这个问题的方法:@Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) for (int i = 0; i @Julia 一个更简洁的解决方案是在 getView() 上执行此操作,因为您不需要滚动功能。您现在可以在我编辑的答案中使用它。

以上是关于如何在listview android中仅更改第二个单元格的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ListView 中仅显示偶数位置项?

如何在我的 android 应用程序中仅启用英文键盘?

Flutter 在 ListView 中仅重建一行

在 ListView 中仅将标题设为粗体

Android中的ListView直到我触摸才显示项目

如何更改 Android ListView 分隔线的颜色?