2011-04-03 34 views
2

我有這種情況:一個抽象活動和一系列擴展這個活動的活動。與父母活動的區別只是一塊佈局和一些方法,我該如何處理佈局?我聲明'n'非常類似的佈局?或者我只能聲明一個,然後只擴展到更改的程度?在這種情況下,如何?抽象活動作爲其他活動的基類

我給你舉個例子。

在MyAbstractActivity我打電話的setContentView(R.layout.abstract_layout),其中abstract_layout.xml有這樣的佈局:

<LinearLayout> 
    <Button id=1/> 
    <Button id=2/> 
    <Button id=3/> 
    <Button id=4/> 
</LinearLayout> 

現在在擴展MyAbstractActivity假設我們想用以下ID = 2按鈕一個文本框MyConcreteActivity ,我們該怎麼辦?

在此先感謝!

編輯: 在超類中使用ViewStub解決並在子類中更改它。

+0

你可以膨脹子類中的視圖,然後編輯它並再次setContentView – Blundell 2011-04-03 16:57:34

+0

不幸的是,你不能調用'setContentView'兩次。 – 2011-04-03 17:01:19

回答

1

您需要爲每個子類分別佈局。然後在你的子類onCreate你可以這樣做:

setContentView(R.layout.concrete_layout_1); 
super.onCreate(savedInstanceState); 

,並避免在您的摘要活動呼籲setContentView。根據您目前在MyAbstractActivity#onCreate中的代碼,您可能需要進行一些重構。

最後,佈局並沒有真正的繼承概念,儘管你可以用<include ...>做一些有創意的事情;如果您關心DRY,您可能會檢查Creating Reusable UI Components

+0

我解決了declarin ViewStub的超類,並改變它的子類 – ech0s7r 2011-04-27 20:31:00

+0

嗨馬修。只是想知道爲什麼我們應該避免在抽象活動中調用'setContentView'。當我發現這個問題時,我正要這麼做...... – 2011-10-25 00:17:46

+0

以下是如何設置內容視圖的示例:http://stackoverflow.com/a/8821459/3681880 – Suragch 2014-12-30 22:38:07