问题:
我开发了自定义复合视图,我不确定如何在列表视图中显示它。
我做了什么:
- >我的自定义复合视图
public class HZScrollView extends LinearLayout {
public HZScrollView(Context context) {
super(context);
initView(context);
}
private void initView(Context context) {
mContext = context;
setOrientation(LinearLayout.HORIZONTAL);
setGravity(Gravity.CENTER_VERTICAL);
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
this.setLayoutParams(lp);
//inflate XML resource and attach
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mInflater.inflate(R.layout.hz_scroll_view, this, true);
}
}
public void addContent(String name, String age, String sex) {
//content is added to the individual widgets within this compound view
}
- >我的适配器
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = new HZScrollView(context); //<--- PROBLEM !
}
}
我遇到的主要问题是标有“问题”的行导致异常java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.app/.MainActivity}: android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true
在'net周围的示例代码中,getView()通常会扩展XML布局,但在我的情况下,复合视图是完全独立的。
问题:
如何将自定义复合视图插入/附加到listview项目中?
答案 0 :(得分:0)
<强>解决方案:强>
1)在适配器中,将HZScrollView分配给convertView是好的
2)要解决LayoutParams的另一个问题,需要更新initView()以使用AbsListView.LayoutParams而不是ViewGroup.LayoutParams(因为父容器是listView)
3)为了修复InflateException,在XML中使用了<merge>
的子视图,我重构了将子视图包装在LinearLayout中。注意:在XML中为“hz_scroll_view”文件使用<merge>
就可以了。
对我来说,真正有趣的部分是第1点,因为我不确定是否可以将自定义复合视图分配给列表视图项。