2011-05-01 42 views
1

我有一個複雜的空視圖的佈局,圖標,文字,按鈕等有沒有辦法在適配器爲空時指定一個用於ListView的佈局?

這是很容易我layout.xml內選擇一個視圖中使用時,列表視圖是空的,類似於
getListView()。setEmptyView(findViewById(R.id.empty));
此代碼設置空白視圖工作得很好,當它駐留在layout.xml文件中時。

現在我想這個觀點重構到它自己的empty.xml佈局文件,並編碼它類似於以下:

// Setup the empty layout.xml 
LayoutInflater vi = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View vlEmpty = vi.inflate(R.layout.empty, null); 

// Find the empty layout view 
vEmpty = vlEmpty.findViewById(R.id.llEmpty); 
vEmpty.setOnClickListener(ocl); 

// Find the ListView 
vListView = (ListView) findViewById(R.id.lvWords); 
vListView.setEmptyView(vEmpty); 

的問題是,內llEmpty細節從未露面;完全相同的佈局和視圖適用於主佈局,只是不會重構到其自己的xml文件中。

有沒有人有這樣的工作嗎?

回答

0

我懷疑setEmptyView()自動使任何容器的供應View一個孩子在你的活動。

就個人而言,我只是用<include>元素,而不是分別膨脹了。但是,如果你真的想單獨膨脹它,費米在我寫這篇文章時發佈的答案可能會有效,這取決於ListView的父母是什麼。

+0

這實際上解決了我的問題,Femi的答案是真正有趣的,並且部分工作,它需要更多的工作才能工作。 – Noah 2011-05-03 20:29:55

2

您可能需要適當的情況下傳遞給充氣:

vListView = (ListView) findViewById(R.id.lvWords); 
View vlEmpty = vi.inflate(R.layout.empty, (ViewGroup)vListView.getParent()); 

它(應該)讓他們都住在同一個根視圖。僅通過父活動的根視圖可能就足夠了。

讓我知道這是否有效。

+0

這工作,因爲現在顯示出來,但在佈局的底部。實際上在列表視圖之後還有另一個視圖 - 我會進一步調查 – Noah 2011-05-03 20:18:09

+1

是的,如果你膨脹它,它不會帶有任何佈局屬性,所以你需要手動設置高度/寬度/邊距/等。如果你的根視圖是(例如)一個RelativeLayout,你需要使用適當的設置。作爲一個例子:'TextView vlEmpty = vi.inflate(R.layout.empty,(ViewGroup)vListView.getParent()); vlEmpty.setId(1); lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.WRAP_CONTENT); lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); lp.setMargins(0,5,0,0); addView(vlEmpty,lp);'然後設置空視圖。 – Femi 2011-05-03 20:48:05

+0

對於一個真正有趣的答案+1;我會接受它,但沒有時間充分測試;我幾乎試圖添加另一個問題,只是爲了讓你回答它。 – Noah 2011-05-16 20:51:45

相關問題