use*_*488 66 android extends custom-activity android-activity
我需要创建一个扩展的基类,Activity它可以在我的应用程序中执行一些常见任务,并通过以下形式扩展我的活动:
public BaseActivity扩展Activity {....}
public SubActivity扩展了BaseActivity {...}
在SubActivity中我需要为BaseActivity中定义的一些变量和UI组件赋值,我可能需要根据某个标志值为SubActivity定义不同的布局,同样(在SubActivity中)我想执行在BaseActivity中定义的asyncTask.
这可能吗?如果是的话,是否有任何可能有帮助的教程?先感谢您
Gui*_*ume 136
你到底想要达到什么目的?除了一些变量或部分布局外,有两个不同的活动和一个普通的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;
}
}
Run Code Online (Sandbox Code Playgroud)
对于您希望特定于子类的每个位,您可以拥有更多抽象方法.
在我看来,这样做比将具体的子类具体化到一个具体的超类要好得多:这会导致许多问题并且通常很难调试.
这个问题已经有了很好的答案.
然而.我的答案是那些正在寻找一些工作实例的人.
这是完整的工作 - > 代码

我们在这里没有做任何新的事情,它就像任何其他继承场景一样(你想在多个地方有一些常见的行为,但你只想写一次这种行为).
优点:
它确实提供了更好的代码可读性,可维护性和等等.但是,如果你的大脑像瞪羚一样奔跑,它们对你来说并不重要.
我们追求继承"CONTROL"的真正力量.(这也是在现实生活中发生的事情.父控制孩子:)).
在我的示例中,我有两个活动MainActivity和OtherActivity.两个活动都有不同的布局,但我希望它们都以一些动画或一些欢迎信息开头.
我们的首要任务是找出共同的行为.这里 - >用动画启动Activity.
我们找到了常见的"东西",现在我们将在BaseClass(AnimationActivity)中编写该行为.
MainActivity和OtherActivity将继承AnimationActivity.
所以代码看起来像`
BaseActivity
AnimationActivity {
startAnimation()
{
....
}
}
Run Code Online (Sandbox Code Playgroud)
儿童活动
MainActivity extends AnimationActivity{
}
OtherActivity extends AnimationActivity{
}
Run Code Online (Sandbox Code Playgroud)
这种设计方法提供了很多控制和灵活性(POWER OF MODIFIER).
1)CONTROL:将动画方法保留在onCreate()中当您决定应该使用Animation启动活动时.将您的方法保存在onCreate(Bundle bundle)方法中.现在只需更改修改器,即可控制子活动.
如果将修饰符保留为
final:子活动将以父动画开头.
摘要:儿童活动必须给自己动画.
无修饰符:子活动可以通过覆盖动画方法拥有自己的动画,否则子视图将具有父动画.
2)灵活性:不要将动画方法保留在onCreate()中通过不将动画方法保留在onCreate(Bundle bundle)中,可以提供子活动的灵活性.现在活动可以灵活地拥有父动画或他们自己的动画或根本没有动画.
希望能帮助到你.
快乐学习.
`
是的,你可以,你应该记住基本的继承规则.如果您将其保护而不是私有,您将继承内部AsyncTask活动和BaseActivity中定义的属性.从我现在看到的,我认为你应该使BaseActivity成为一个抽象类,因为只会真正使用subActivities的实例.
你应该开始尝试它,它会比你想象的更容易.如果您遇到任何问题,请问问.