动态添加图像视图到listview

时间:2016-08-17 12:32:02

标签: android listview android-studio

我有一个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;
}

任何人都可以帮助我吗?

谢谢

2 个答案:

答案 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);
}