我目前正在使用
在启动时使用从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;因此,我不想直接对元素(以及它们的外观)进行编程。
答案 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:)
干杯!