为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

婷婷同学_ 2019-10-17 12:48:33
我需要创建一个扩展的基类,该基类可以Activity在应用程序中执行一些常见任务,并通过以下形式扩展我的活动:公共BaseActivity扩展了活动{....}公共SubActivity扩展了BaseActivity {...}在SubActivity中,我需要给在BaseActivity中定义的一些变量和UI组件赋值,我可能需要根据一些标志值为SubActivity定义不同的布局,也(在SubActivity中)我想执行在BaseActivity中定义的asyncTask。这可能吗?如果是,是否有任何教程可以帮助您?先感谢您
查看完整描述

3 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

您到底想达到什么目的?除了某些变量或布局的某些部分以外,是否有两个具有共同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;

    }

}

对于想要特定于子类的每一点,您可以拥有更多抽象方法。


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


查看完整回答
反对 回复 2019-10-17
?
忽然笑

TA贡献1806条经验 获得超5个赞

这个问题已经有了很好的答案。

然而。我的答案是针对那些正在寻找工作示例的人。

这是完整的工作-> 代码


//img1.sycdn.imooc.com//5da7f2c6000143c005830345.jpg

我们在这里没有做任何新的事情,就像任何其他继承方案一样(您希望在多个地方有一些共同的行为,但只想编写一次该行为)。


优点: 它的确提供了更好的代码可读性,可维护性和等等。但是不是这些能力,如果您的大脑像瞪羚一样运转,它们对您来说就没有关系。

我们追求继承“ CONTROL”的真正力量。(这也是现实生活中发生的事情。父母控制孩子:))。


在我的示例中,我有两个活动MainActivity和OtherActivity。两种活动都有不同的布局,但是我希望它们都以动画或欢迎消息开头。


我们的首要任务是找出常见行为。在这里->从动画开始活动。

我们已经找到了常见的“事物”,现在我们将该行为写在BaseClass(AnimationActivity)中。

MainActivity和OtherActivity将继承AnimationActivity。


所以代码看起来像是`


基础活动


AnimationActivity {


  startAnimation()

  {  

    ....  

  } 

}

儿童活动


MainActivity extends AnimationActivity{


}


OtherActivity extends AnimationActivity{


}

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


1)控制:当您决定以动画开始活动时,将动画方法保留在onCreate()中。将您的方法保留在onCreate(Bundle bundle)方法中。现在,只需更改修改器,就可以控制子活动。

如果将修饰符保留为

final:子级活动将从父级Animation开始。

摘要:儿童活动将不得不赋予自己的动画效果。

no修饰符:子活动可以通过覆盖动画方法来拥有自己的动画,否则,子活动将具有父级动画。


2)灵活性:不要将动画方法保留在onCreate()内,可以通过不将动画方法保留在onCreate(Bundle bundle)中来提供子活动的灵活性。现在,活动可以灵活地具有父级动画或自己的动画,也可以根本没有动画。

希望能帮助到你。

学习愉快。


`


查看完整回答
反对 回复 2019-10-17
?
www说

TA贡献1775条经验 获得超8个赞

是的,您可以,您应该牢记基本的继承规则。如果您将内部AsyncTask活动和属性定义为私有属性而不是私有属性,则将继承它们。从现在看来,我认为您应该使BaseActivity成为一个抽象类,因为仅会真正使用subActivities的实例。

您应该只是开始尝试一下,它就会比您想象的要容易地工作。如果您发现任何问题,请问。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 426 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信