Android 当您滚动经过该项目时,ListView 适配器改变颜色
Android ListView Adaptor changing colour when you scroll past the item
好的,我们有一些领域结果返回了我们制作的一组股票订单。根据库存订单是否完全签入,我们使用适配器中的 if 语句将行项目的背景颜色显示为绿色或蓝色。
问题是加载时订单正确显示为 green/blue。但是当你向下滚动时,蓝色的会变成绿色。 (见图片)。我们认为可能是数据在某处发生了变化,但不确定为什么会发生这种情况,因为我们只是在页面上滚动。
创建这个的代码:
StockOrdersFragment.java
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
myView = inflater.inflate(R.layout.stock_orders_layout, container, false);
listView = myView.findViewById(R.id.listView);
stockOrdersService = new StockOrdersService(this);
stockOrdersService.fetchFromServer(getActivity());
fetchStockOrders();
return myView;
}
public void fetchStockOrders()
{
stockOrders.clear();
RealmResults<StockOrder> savedStockOrders = stockOrdersService.all();
stockOrders.addAll(savedStockOrders);
StockOrdersAdaptor adaptor = new StockOrdersAdaptor(stockOrders, getActivity());
listView.setAdapter(adaptor);
}
@Override
public void ordersReceived() {
fetchStockOrders();
}
StockOrdersAdaptor.java(做颜色的位)
lastPosition = position;
if(stockOrder != null){
viewHolder.stockOrderId.setText(String.valueOf(stockOrder.id));
viewHolder.supplierName.setText(stockOrder.supplier.name);
if (stockOrder.allItemsHaveBeenReceived()) {
convertView.setBackgroundResource(R.color.colorGreen);
}
}
// Return the completed view to render on screen
return convertView;
allItemsHaveBeenRecieved()
public Boolean allItemsHaveBeenReceived()
{
for (StockOrderDetails detail: details) {
if (detail.quantity != detail.quantityReceived) {
return false;
}
}
return true;
}
在此处添加 else 语句:
if (stockOrder.allItemsHaveBeenReceived()) {
convertView.setBackgroundResource(R.color.colorGreen);
} else {
convertView.setBackgroundResource(R.color.colorBlue);
}
问题是当您的物品被回收时它仍然很脏。确保每次适配器绑定到它时,您都从列表项布局中填充 所有 UI 项。
好的,我们有一些领域结果返回了我们制作的一组股票订单。根据库存订单是否完全签入,我们使用适配器中的 if 语句将行项目的背景颜色显示为绿色或蓝色。
问题是加载时订单正确显示为 green/blue。但是当你向下滚动时,蓝色的会变成绿色。 (见图片)。我们认为可能是数据在某处发生了变化,但不确定为什么会发生这种情况,因为我们只是在页面上滚动。
创建这个的代码:
StockOrdersFragment.java
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
myView = inflater.inflate(R.layout.stock_orders_layout, container, false);
listView = myView.findViewById(R.id.listView);
stockOrdersService = new StockOrdersService(this);
stockOrdersService.fetchFromServer(getActivity());
fetchStockOrders();
return myView;
}
public void fetchStockOrders()
{
stockOrders.clear();
RealmResults<StockOrder> savedStockOrders = stockOrdersService.all();
stockOrders.addAll(savedStockOrders);
StockOrdersAdaptor adaptor = new StockOrdersAdaptor(stockOrders, getActivity());
listView.setAdapter(adaptor);
}
@Override
public void ordersReceived() {
fetchStockOrders();
}
StockOrdersAdaptor.java(做颜色的位)
lastPosition = position;
if(stockOrder != null){
viewHolder.stockOrderId.setText(String.valueOf(stockOrder.id));
viewHolder.supplierName.setText(stockOrder.supplier.name);
if (stockOrder.allItemsHaveBeenReceived()) {
convertView.setBackgroundResource(R.color.colorGreen);
}
}
// Return the completed view to render on screen
return convertView;
allItemsHaveBeenRecieved()
public Boolean allItemsHaveBeenReceived()
{
for (StockOrderDetails detail: details) {
if (detail.quantity != detail.quantityReceived) {
return false;
}
}
return true;
}
在此处添加 else 语句:
if (stockOrder.allItemsHaveBeenReceived()) {
convertView.setBackgroundResource(R.color.colorGreen);
} else {
convertView.setBackgroundResource(R.color.colorBlue);
}
问题是当您的物品被回收时它仍然很脏。确保每次适配器绑定到它时,您都从列表项布局中填充 所有 UI 项。