我需要创建一个扩展Activity
的基类,它在我的应用程序中执行一些常见任务,并从中扩展我的活动,采用以下形式:
public BaseActivity扩展了活动{....}
public SubActivity扩展了BaseActivity {...}
SubActivity 中的我需要为 BaseActivity 中定义的某些变量和UI组件赋值,我可能需要为 SubActivity 根据一些标志值,也(在 SubActivity 中)我想执行 BaseActivity 中定义的asyncTask。
这可能吗?如果是的话,是否有任何可能有帮助的教程? 提前谢谢你答案 0 :(得分:135)
你到底想要达到什么目的?除了一些变量或布局的一部分之外,还有两个不同的活动和一个普通的ui?
在这种情况下,我建议有一个基本的抽象活动,以及两个具体的继承子类。您可以在基本活动中定义所有常见行为,并为差异提供抽象方法,然后在实际实现中覆盖这些方法。
例如,对于具有不同布局资源的两个活动:
public abstract class BaseActivity extends Activity {
@Override
public void onCreate(bundle) {
super.onCreate(bundle);
setContentView(getLayoutResourceId());
}
protected abstract int getLayoutResourceId();
}
public class Activity1 extends BaseActivity {
@Override
public void onCreate(bundle) {
super.onCreate(bundle);
// do extra stuff on your resources, using findViewById on your layout_for_activity1
}
@Override
protected int getLayoutResourceId() {
return R.layout.layout_for_activity1;
}
}
对于您想要特定于子类的每一位,您可以拥有更多抽象方法。
在我看来,这比拥有一个具体的超类的具体子类要好得多:这可能会导致许多问题并且通常很难调试。
答案 1 :(得分:5)
是的,你可以,你应该记住基本的继承规则。如果您将其保护而不是私有,您将继承内部AsyncTask活动和BaseActivity中定义的属性。从我现在看到的情况来看,我认为你应该让BaseActivity成为一个抽象类,因为只会真正使用subActivities的实例。
你应该开始尝试它,它会比你想象的更容易。如果你遇到任何问题,请问问。
答案 2 :(得分:5)
这个问题已经有了很好的答案 然而。我的答案是那些正在寻找一些工作实例的人 以下是完整的工作 - > CODE
我们在这里没有做任何新的事情,它就像任何其他继承场景一样(你想在多个地方有一些常见的行为,但你只想写一次这种行为)。
<强> ADVANTAGE:强> 它确实提供了更好的代码可读性,可维护性和等等。但是,如果你的大脑像瞪羚一样奔跑,那么它们对你来说并不重要 我们追求真正的继承权力“CONTROL”。 (这就是现实生活中发生的事情。父母控制孩子:))。
在我的示例中,我有两个活动MainActivity和OtherActivity。 两个活动都有不同的布局,但我希望它们都以一些动画或一些欢迎信息开始。
我们的首要任务是找出共同的行为。
这里 - &gt;用动画启动活动
我们找到了常见的“东西”,现在我们将在BaseClass中编写该行为( AnimationActivity )。
MainActivity 和OtherActivity将继承AnimationActivity。
所以代码看起来像`
BaseActivity
AnimationActivity {
startAnimation()
{
....
}
}
儿童活动
MainActivity extends AnimationActivity{
}
OtherActivity extends AnimationActivity{
}
这种设计方法提供了很多控制和灵活性(POWER OF MODIFIER)。
1)CONTROL:将动画方法保留在onCreate()中
当您决定应使用动画启动活动时。
将您的方法保存在onCreate(Bundle bundle)方法中。现在只需更改修改器,即可控制子活动
如果你将修饰符保持为
final:子活动将以父动画开始
摘要:儿童活动必须提供自己的动画
no modifier:子活动可以通过覆盖动画方法拥有自己的动画,否则孩子将拥有父动画。
2)灵活性:不要将动画方法保留在onCreate()中
您可以通过不将动画方法保留在onCreate(Bundle bundle)中来提供子活动的灵活性。
现在,活动可以灵活地拥有父动画或他们自己的动画或根本没有动画
希望它有所帮助。
快乐学习。
`
答案 3 :(得分:3)
我找到了一种更容易的方法来@ Guillaume的解决方案。仅在ContentView
中设置BaseActivity
一次,并且不要在扩展它的活动中设置它:
public abstract class BaseActivity extends Activity {
@Override
public void onCreate(bundle) {
super.onCreate(bundle);
setContentView(activity_main);
}
}
public class Activity1 extends BaseActivity {
@Override
public void onCreate(bundle) {
super.onCreate(bundle);
// setContentView(activity_activity1) // Do NOT call this.
}
}