2013-06-28 35 views
0

问题:使用自定义复合视图为ListView的项目

我已经开发了定制的复合视图,我不确定如何在我的列表视图显示。

我所做的:

- >我的自定义视图复合

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 ! 
} 
} 

主要的问题我体验是标有“PROBLEM”的行会导致出现问题在'net'的示例代码中,getView()通常会扩展XML布局,但在我的情况下,复合视图是完全自包含的。

问:

怎么可能插入/附上我的自定义视图复合到ListView项?

回答

0

解决方案:

1)在适配器,分配HZScrollView到convertView是细

2)与的LayoutParams解决另一个问题,所述initView()需要被更新,以便使用AbsListView。 LayoutParams而不是ViewGroup.LayoutParams(因为父容器是一个listView)

3)修复Inf​​lateException,子视图在XML中使用<merge>,我重构了在LinearLayout中包装子视图。注意:在“hz_scroll_view”文件的XML中使用<merge>就好了。


真正有趣的部分,对我来说,是点#1,因为我不确定是否指定一个自定义的化合物,以列表视图项目是可行的。

+0

我想要使用一个自定义复合视图,该视图在视图的java文件中扩展为'TableLayout',它扩展了'LinearLayout',并且它的XML具有'LinearLayout'作为根元素。所以我应该改变这个'合并'?我得到一个'InvalidStateException'或类似的东西。我试图添加的“视图”已经有父母或类似的信息。 –

相关问题