如何仅更改列表视图中第二个单元格的背景颜色 android
How can I change the background color of only the second cell in listview android
如何只更改列表视图中第二个可见单元格的背景颜色?我只想更改列表视图中第二个可见单元格的背景颜色。有什么办法可以做到这一点。
我的适配器 class:
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;
}
}
和自定义视图 class:
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 的第二行。
我猜你的意思是你想为从顶部开始的第二个可见项目而不是列表中的第二个项目着色。
如果是这种情况,您可以简单地向适配器的 getView 方法添加一个 else 语句 class 以从不在第二个可见项目位置的文本视图中删除背景。您的代码将如下所示:
@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;
}
如何只更改列表视图中第二个可见单元格的背景颜色?我只想更改列表视图中第二个可见单元格的背景颜色。有什么办法可以做到这一点。 我的适配器 class:
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;
}
}
和自定义视图 class:
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 的第二行。
我猜你的意思是你想为从顶部开始的第二个可见项目而不是列表中的第二个项目着色。
如果是这种情况,您可以简单地向适配器的 getView 方法添加一个 else 语句 class 以从不在第二个可见项目位置的文本视图中删除背景。您的代码将如下所示:
@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;
}