如何从XML中扩展View子类?

时间:2012-11-19 12:29:40

标签: android xml view subclass inflate

我目前正在使用

在启动时使用从XML扩展的视图填充Adapter
private void addView(Context context) {
    LayoutInflater inflater = LayoutInflater.from(context);
    View view = inflater.inflate(R.layout.deal_tile, this, null);
    mViews.add(view);
}

但是,我发现将视图存储在AdapterView内的列表中会导致这些视图中的控件出现问题,因此我想转换为使用Adapter#getView(int position, View recycle, ViewGroup container)中的回收功能。 / p>

出于这个原因,我想使用自定义视图类,以便在我在适配器中重新填充它之前,我可以进行健全性检查(if(recycle!=null && recycle instanceof CustomView))。但是,我无法找到如何从XML中扩展自定义视图类。我可以找到你如何添加一个膨胀的视图到自定义视图,我可以找到你如何将自定义视图插入到XML布局等,显然我很高兴直接使用这些东西膨胀LayoutInflater,但我找不到用于生成自定义视图的等效项。我想重用我已有的XML;因此,我不想直接对元素(以及它们的外观)进行编程。

1 个答案:

答案 0 :(得分:0)

我用它来创建我自己的幻灯片库,我认为这会有所帮助。

    LinearLayout internalWrapper = new LinearLayout(getContext());
    internalWrapper.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    internalWrapper.setOrientation(LinearLayout.HORIZONTAL);
    addView(internalWrapper);
    this.mItems = items;
    LinearLayout generalLayout = new LinearLayout(this.getContext());

    generalLayout = (LinearLayout) View.inflate(this.getContext(), R.layout.galleryrow, null);

    // inside linear layout
    LinearLayout generalLinear = (LinearLayout) generalLayout.findViewById(R.id.rowgenerallin);
    // set height & width to the LINEAR
    generalLinear.setLayoutParams(new LayoutParams(reference_width, reference_height));

    ImageView ivl = (ImageView) generalLayout.findViewById(R.id.arrow_left);
    ImageView ivr = (ImageView) generalLayout.findViewById(R.id.arrow_right);
    internalWrapper.addView(generalLayout);

在我的情况下,R.layout.gallery_row包含我要管理的两个图像,由LinearLayous (rowgenerllin)嵌套,内部包装器是在活动的主布局中声明的空LinearLayout。 仔细检查LayoutParams代码,否则你会得到一个大的NULL:)

干杯!