【问题标题】:Inflating view from within instance not working从实例内部膨胀视图不起作用
【发布时间】:2017-02-28 15:48:50
【问题描述】:

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

如果我从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;*/
}

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

【问题讨论】:

  • 您可以调试并查看视图的布局方式。 Show layout boundsTools-> Android -> Layout Inspector。在我看来,您的视图高度为 0。
  • 布局检查器的重要提示。这告诉我CarsGridViewItem 有宽度和高度,而其中的膨胀的RelativeLayout 没有宽度和高度!这可能是什么原因造成的?
  • 也发布CarsGridViewItem class。
  • @azizbekian 更新了整个 CarsGridViewItem

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


【解决方案1】:

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

你已经覆盖了onLayout() 并且在那里什么也没做,因此没有任何东西被布置。让超类为你布局视图。

【讨论】:

  • 我什至不知道我为什么要覆盖 onLayout 方法,认为我的 IDE 出于某种原因添加了它...效果很好,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
相关资源
最近更新 更多