我目前正在開發的Android應用程序的主要活動已增長得相當大。這主要是因爲它包含一個帶有3個選項卡的TabWidget
。每個選項卡都有相當多的組件。活動必須一次控制所有這些組件。所以我想你可以想象這個活動有20個字段(幾乎每個組件都有一個字段)。它還包含很多邏輯(點擊監聽器,填充列表的邏輯等)。Android - 編寫自定義(複合)組件
我通常在基於組件的框架中做的事情是將所有東西都拆分成自定義組件。每個自定義組件都會有明確的責任。它將包含它自己的一套組件以及與該組件相關的所有其他邏輯。
我試圖弄清楚如何做到這一點,並且我在Android文檔中發現了一些他們喜歡稱之爲「複合控制」的東西。 (請參閱http://developer.android.com/guide/topics/ui/custom-components.html#compound並滾動到「複合控件」部分)我想根據定義視圖結構的XML文件創建這樣的組件。
在本文檔中,它說:
注意,只是一個活動一樣, 您可以使用聲明 (基於XML的)方法來創建 包含的組件,或者你可以嵌套 他們編程從您的代碼。
嗯,那是個好消息!基於XML的方法正是我想要的!但它沒有說明如何去做,除了它像「一個活動」一樣......但是我在一個活動中所做的是呼叫setContentView(...)
來從XML擴充視圖。如果您的子類爲LinearLayout
,則此方法不可用。
所以我試圖手動充氣,這樣的XML:
public class MyCompoundComponent extends LinearLayout {
public MyCompoundComponent(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_layout, this);
}
}
這個工程,除了一個事實,即XML我載有聲明爲根元素LinearLayout
。這導致膨脹的LinearLayout
是MyCompoundComponent
的孩子,其本身已經是LinearLayout
!!所以現在我們在MyCompoundComponent
和它實際需要的視圖之間有一個冗餘的LinearLayout。
有人可以請我提供一個更好的方法來解決這個問題,避免有一個多餘的LinearLayout
實例嗎?
我愛從我學到的東西的問題。謝謝。 – 2009-09-26 02:16:59
我最近寫了一篇關於此的博客文章: http://blog.jteam.nl/2009/10/08/exploring-the-world-of-android-part-3/ – 2009-10-12 09:04:09