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。
希望能帮助到你。
快乐的学习。
`