android如何创build我自己的Activity并扩展它?

我需要创build一个扩展Activity的基类,它在我的应用程序中执行一些常见的任务,并通过以下forms扩展我的活动

公共BaseActivity扩展活动{…}

公共SubActivity扩展BaseActivity {…}

SubActivity中,我需要给一些variables和在BaseActivity中定义的UI组件的 ,我可能需要根据一些标志值为SubActivity定义不同的布局,(在SubActivity中 )我想执行在BaseActivity中定义的asyncTask

这可能吗? 如果是的话,有没有任何教程可以帮助? 先谢谢你

你究竟想达到什么目的? 除了一些variables或布局的部分,有两个不同的活动与一个共同的用户界面?

在这种情况下,我build议有一个基本的抽象活动,和两个具体的inheritance子类。 您可以在基本活动中定义所有常见行为,并为差异设置抽象方法,然后在实际实现中重写。

例如,对于具有不同布局资源的两个活动:

 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; } } 

你可以有更多的抽象方法,你想要的每一个特定的子类。

这样做,在我看来,比拥有一个具体的子类到一个具体的超类要好得多:这可能导致许多问题,通常很难debugging。

是的你可以,你应该牢记基本的inheritance规则。 您将inheritance内部AsyncTask活动和在BaseActivity中定义的属性(如果使它们受保护而不是私有)。 从我现在看到的,我认为你应该让BaseActivity成为一个抽象类,因为只有subActivities的实例才会真正被使用。

你应该开始尝试,它会来,工作比你想象的更容易。 如果你偶然发现任何问题,就问。

我已经find了一个更简单的方法@纪尧姆的解决scheme。 在您的BaseActivity只设置ContentView一次,不要在扩展它的活动中设置它:

 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. } } 

这个问题已经有了很好的答案。
我的答案是针对那些正在寻找一些实例的人。
这是完整的工作 – > 代码

在这里输入图像说明
我们在这里没有做任何新的事情,就像任何其他的inheritance场景(你想在多个地方有一些共同的行为,但你只想写一次这个行为)。

优点:它提供了更好的代码可读性,可维护性和等等。但不是在这些之后,如果你的大脑像瞪羚一样运行,它们对你来说无关紧要。
我们是在inheritance“CONTROL”的真正力量之后。 (这也是现实生活中发生的事情,父母控制孩子:))。

在我的例子中,我有两个活动MainActivity和OtherActivity。 这两个活动有不同的布局,但我希望他们都开始一些animation或一些欢迎消息。

我们的首要任务是找出共同的行为。 这里 – >用animation开始活动。
我们已经find了常见的“东西”,现在我们将在BaseClass( AnimationActivity )中编写该行为。
MainActivity和OtherActivity将inheritanceAnimationActivity。

所以代码看起来像`

BaseActivity

 AnimationActivity { startAnimation() { .... } } 

儿童活动

 MainActivity extends AnimationActivity{ } OtherActivity extends AnimationActivity{ } 

这种devise方法提供了很多控制灵活性 (POWER OF MODIFIER)。

1)CONTROL:保持animation方法在onCreate()当你决定活动应该开始与animation。 保持你的方法在onCreate(Bundle bundle)方法中。 现在只需更改修饰符,您就可以控制子活动。
如果你保持修饰符为
最后:儿童活动将从父animation开始。
摘要:儿童活动将不得不给自己的animation。
无修饰符:小孩活动可以通过覆盖animation方法来拥有自己的animation,否则小孩会有父母animation。

2)灵活性:不要在里面保留animation方法onCreate()你可以通过不在onCreate(Bundle bundle)中保留animation方法来提供孩子活动的灵活性。 现在活动可以灵活地拥有父级animation或自己的animation,或根本没有animation。
希望能帮助到你。
快乐的学习。

`