2011-04-03 58 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