如何更改ListView Android中仅第二个单元格的背景颜色

问题描述

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

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的第二行。

解决方法

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

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

@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;
    }