在实例中使视图无效

时间:2017-02-28 15:48:50

标签: java android android-layout android-view layout-inflater

我正在创建一个适配器,该适配器应该使用汽车图像和模型名称填充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;*/
}

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

1 个答案:

答案 0 :(得分:1)

onMeasure()删除onLayout()CarsGridViewItem方法或正确实施,因为您现在不能正确覆盖它们。

你已经覆盖onLayout()并且没有做任何事情,因此没有任何内容。让超类为您构建视图。