我正在创建一个适配器,该适配器应在GridView中填充汽车图像和模型名称。我已经创建了一个网格项目作为自己的XML文件,并带有所需的小部件(ImageView和TextView)。但是,我似乎无法从我的CarsGridViewItem实例中扩大视图。但是,如果我从适配器的getView方法中扩展视图,则它可以工作。

如果我从CarsGridViewItem实例内部扩展视图,将会发生什么事情,那就是我看不到应该被扩展的视图。

以下是我的CarsGridViewItem

public class CarsGridViewItem extends RelativeLayout {

    private Car car;

    private ImageView carImg;
    private TextView nameTxt;

    public CarsGridViewItem(Car car, Context context) {
        super(context);

        this.car = car;

        inflate(getContext(), R.layout.fragment_cars_grid_item, this);
        findViews();
        setupViews();
    }

    private void findViews() {
        this.carImg = (ImageView)findViewById(R.id.car_image);
        this.nameTxt = (TextView)findViewById(R.id.car_name);
    }

    private void setupViews(){
        this.car.loadImageIntoView(this.carImg);
        this.nameTxt.setText(this.car.getName());
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
    }

    @Override
    protected void onLayout(boolean b, int i, int i1, int i2, int i3) {

    }
}


还有我适配器的getView方法

public View getView(int position, View convertView, ViewGroup parent){
    return new CarsGridViewItem(cars.get(position), mContext);

    /* The code below works!

    LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    RelativeLayout view = (RelativeLayout) inflater.inflate(R.layout.fragment_cars_grid_item, null);

    ImageView carImg = (ImageView)view.findViewById(R.id.car_image);
    cars.get(position).loadImageIntoView(carImg);

    TextView nameTxt = (TextView)view.findViewById(R.id.car_name);
    nameTxt.setText(cars.get(position).getName());

    return view;*/
}


我在这里做错了,但我似乎无法弄清楚。我在膨胀视图主题中找到的所有示例都是这样!

最佳答案

onMeasure()中删除​​onLayout()CarsGridViewItem方法或正确实现它们,因为您现在没有正确覆盖它们。

您已覆盖onLayout(),并且在此处不执行任何操作,因此未进行任何布局。让超类为您布置视图。

07-27 19:12