我有一个listview,我将通过我的适配器为每一行添加一些imageview;当我运行我的程序时,它不会给出任何错误,但它会向listview添加错误数量的图像视图,而且当我滚动列表视图时,图像视图的数量也会改变! 我的适配器类如下所示:
public class RideAdapter extends ArrayAdapter {
List list = new ArrayList();
public RideAdapter(Context context, int resource){
super(context, resource);
}
public void add(Rides object) {
super.add(object);
list.add(object);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row;
row = convertView;
RideHolder rideHolder;
if(row == null){
LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = layoutInflater.inflate(R.layout.list_row, parent, false);
rideHolder = new RideHolder();
rideHolder.tx_start = (TextView)row.findViewById(R.id.tx_start);
rideHolder.tx_end = (TextView)row.findViewById(R.id.tx_end);
rideHolder.tx_seats = (TextView)row.findViewById(R.id.tx_seats);
rideHolder.tx_distance = (TextView)row.findViewById(R.id.tx_distance);
rideHolder.tx_name = (TextView)row.findViewById(R.id.tx_name);
rideHolder.linearLayout_seats = (LinearLayout) row.findViewById(R.id.linearLayout_seats);
row.setTag(rideHolder);
}
else {
rideHolder = (RideHolder) row.getTag();
}
Rides ride = (Rides) this.getItem(position);
rideHolder.tx_start.setText(ride.getStart());
rideHolder.tx_end.setText(ride.getEnd());
rideHolder.tx_name.setText(ride.getName());
for(int i = 0; i < ride.getSeats(); i++) {
ImageView image = new ImageView(this.getContext());
image.setImageResource(R.drawable.empty_seat);
rideHolder.linearLayout_seats.addView(image);
}
return row;
}
static class RideHolder{
TextView tx_start, tx_end, tx_seats, tx_distance, tx_name;
LinearLayout linearLayout_seats;
}
任何人都可以帮助我吗?
谢谢
答案 0 :(得分:2)
在布局中添加布局removeAllViews的视图之前
Rides ride = (Rides) this.getItem(position);
rideHolder.tx_start.setText(ride.getStart());
rideHolder.tx_end.setText(ride.getEnd());
rideHolder.tx_name.setText(ride.getName());
rideHolder.linearLayout_seats.removeAllViews();
for(int i = 0; i < ride.getSeats(); i++) {
ImageView image = new ImageView(this.getContext());
image.setImageResource(R.drawable.empty_seat);
rideHolder.linearLayout_seats.addView(image);
}
return row;
答案 1 :(得分:0)
在将其添加到布局之前设置setLayoutParams
。
for(int i = 0; i < ride.getSeats(); i++) {
//ImageView Setup
ImageView imageView = new ImageView(this);
//ImageView imageView = new ImageView(this.getContext());
//setting image resource
imageView.setImageResource(R.drawable.empty_seat);
//setting image position
imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
//adding view to layout
rideHolder.linearLayout_seats.addView(image);
}