我相信這個問題是在你的getChildView()
方法:
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.catitem, parent, false);
TextView textView_catName = (TextView)convertView.findViewById(R.id.textView_catName);
Category current = categories.get(groupPosition).childs.get(childPosition);
textView_catName.setText(groupPosition + " , " + childPosition);
if(current.childs.size() > 0) {
ExpandableListView elv = new ExpandableListView(context);
elv.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.WRAP_CONTENT, AbsListView.LayoutParams.WRAP_CONTENT));
elv.setAdapter(new CatAdapter(context, current.childs));
((ViewGroup)convertView).addView(elv);
}
return convertView;
}
當你遇到一個「擴張」孩子,你還在膨脹R.layout.catitem
並添加新的elv
它。由於catitem
是RelativeLayout
,您不需要添加任何參數以進行對齊,因此每個視圖都放置在左上角,覆蓋其他任何地方。
您可能需要嘗試更改R.layout.catitem
以垂直LinearLayout
作爲其根。這應該防止他們重疊孩子的頭銜,但我不能保證孩子的孩子不會重疊。這是一個簡單的改變,但值得一試。
此外,從文檔的ExpandableListView
:
注意:您不能使用了Android的價值WRAP_CONTENT:如果父母的大小也沒有嚴格規定在XML ExpandableListView的layout_height屬性(例如,如果父母是滾動型,你可以不指定WRAP_CONTENT,因爲它也可以是任何長度,但你可以使用WRAP_CONTENT如果ExpandableListView家長有一個特定的大小,如100個像素。
這表示「在XML中」,所以我不確定它是否意味着適用於代碼。在我看來,他們會使用相同的機制,因此可能值得研究。我不確定你會如何去設置父級的最大大小。您可能能夠測量一個項目的大小,並乘以子項的數量。你必須考慮邊界/分隔符,所以它可能並不簡單。
如果這不起作用,您可能需要直接滾動您自己的ViewGroup。從頭開始實現它不應該太困難,只是不要忘記嘗試利用視圖回收(目前的方法無論如何)。
嗨,你介意分享一下你設法制作或者可能分享的一些自定義視圖嗎? –
你解決了你的問題我也有同樣的問題stackoverflow.com/questions/18765638/...如果你已經解決了你的問題,請幫助我。 – Cropper
我設法解決了創建自定義視圖並實現自定義OnDraw()的問題。 – UnTraDe