Android ListView回收视图,多个布局
我有意见被回收的问题。我使用了两种布局,但当我上下滚动时,其中一些行的布局会发生变化。我尝试过其他教程,但收效甚微。有什么建议吗Android ListView回收视图,多个布局,android,listview,Android,Listview,我有意见被回收的问题。我使用了两种布局,但当我上下滚动时,其中一些行的布局会发生变化。我尝试过其他教程,但收效甚微。有什么建议吗 public class CustomAdapter extends BaseAdapter { Date date = new Date(); private OfferList[] offers; private String nameCompare = ""; LayoutInflater inflater = getLayou
public class CustomAdapter extends BaseAdapter {
Date date = new Date();
private OfferList[] offers;
private String nameCompare = "";
LayoutInflater inflater = getLayoutInflater();
CustomAdapter (OfferList[] offers, FetchItemsTask fetchItemsTask) {
this.offers = offers;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
if (getItemViewType(position) == 0) {
convertView = inflater.inflate(R.layout.list_offer_group, null);
}
else {
nameCompare = offers[position].getName();
convertView = inflater.inflate(R.layout.list_offer, null);
}
holder.name = (TextView) convertView.findViewById(R.id.name);
holder.color = (TextView) convertView.findViewById(R.id.car_color_stock);
holder.time = (TextView) convertView.findViewById(R.id.time);
holder.offerStatus = (TextView) convertView.findViewById(R.id.offer_status);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.name.setText(offers[position].getCustomerName());
holder.carStockColor.setText(offers[position].getVehicleYear() + " " + offers[position].getVehicleMake());
java.util.Date time1 = new java.util.Date(Long.parseLong(offers[position].getModified()));
holder.time.setText(time1.toString().substring(0, 11) + " | ");
holder.offerStatus.setText(offers[position].getDealStatus());
return convertView;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (nameCompare.equalsIgnoreCase(offers[position].getCustomerName())) {
return 0;
}
else {
return 1;
}
}
@Override
public int getCount() {
return offers.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
public class ViewHolder {
public int type;
TextView name;
TextView color;
TextView time;
TextView offerStatus;
}
}
您必须实现不同的逻辑。代码的问题是,如果
convertView
不为空,这意味着它已被回收,但它以前膨胀了一个与数据相关的不同视图,它将显示旧回收视图的布局(此数据集所需的另一个布局,而不是布局)
因此,您只需检查,如果回收视图膨胀了布局,您需要这个特定的行,或者如果它膨胀了其他视图。如果是前者,那么你可以只设置数据,如果不是,那么你必须放大正确的视图。你已经发布了这个问题,是的,我没有得到一个好的答案,所以你不创建一个与此相同的新问题,否则我怎么能得到答案?很有可能没有人会重新审视这个老问题,所以,这个问题上的代码是不同的。是的,我想通过只膨胀一个布局来实现这一点。我如何检查回收视图是否膨胀了布局,或者是否膨胀了另一个视图?