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

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)

对于您希望特定于子类的每个位,您可以拥有更多抽象方法.

在我看来,这样做比将具体的子类具体化到一个具体的超类要好得多:这会导致许多问题并且通常很难调试.

  • 是的,我在项目的基础活动中也有很多东西.事实上,我通常会花一些时间来考虑它是应该进入基本活动还是(自定义)应用程序.如果它与布局有关,那么活动,如果没有,那么应用程序. (3认同)

Roh*_*ngh 6

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

在此输入图像描述
我们在这里没有做任何新的事情,它就像任何其他继承场景一样(你想在多个地方有一些常见的行为,但你只想写一次这种行为).

优点: 它确实提供了更好的代码可读性,可维护性和等等.但是,如果你的大脑像瞪羚一样奔跑,它们对你来说并不重要.
我们追求继承"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)中,可以提供子活动的灵活性.现在活动可以灵活地拥有父动画或他们自己的动画或根本没有动画.
希望能帮助到你.
快乐学习.

`


J. *_*aes 5

是的,你可以,你应该记住基本的继承规则.如果您将其保护而不是私有,您将继承内部AsyncTask活动和BaseActivity中定义的属性.从我现在看到的,我认为你应该使BaseActivity成为一个抽象类,因为只会真正使用subActivities的实例.

你应该开始尝试它,它会比你想象的更容易.如果您遇到任何问题,请问问.