【问题标题】:What is the correct way to define a BaseActivity定义 BaseActivity 的正确方法是什么
【发布时间】:2018-01-02 07:33:09
【问题描述】:

这个问题我专门针对Android 和使用可以由所有其他活动扩展的基础Activity。一般来说 w.r.t Java 我了解abstract classes 的使用和功能。在我的情况下,我有一个带有一些常见常量、函数和实现一些Interfaces 的基本活动。我的问题是应该是abstract 还是我可以将其保留为普通的Activity。是否有特定的原因让它成为abstract

//Standard BaseActivity 
public abstract class BaseActivity extends Activity {
   //common code
}

//Usage 
public class MyActivity extends BaseActivity {
}

如果我将 BaseActivity 定义如下,这似乎也有效

//Non Abstract Class
public class BaseActivity extends Activity {
}

因此问题是使用摘要是否有特定的原因。 在这两种情况下,我都没有在 Manifest 中定义 BaseActivity。

【问题讨论】:

标签: android android-activity abstract base


【解决方案1】:

BaseActivity的定义可以参考以下方式。

在 android 中创建 baseActivity 一直是个好主意 项目。

我的建议是从 android.app.Activity 创建一个名为 baseActivity 的活动,并使 3 个自定义活动从 baseActivity 扩展。

例如,

public abstract class MyAppBaseActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

还有你的自定义活动

public class MyCustomActivity extends MyAppBaseActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

注意,MyAppBaseActivity 是一个抽象类。原因是,我们不会实例化它。这就是为什么您不需要在 AndroidManifest.xml 文件中添加 MyAppBaseActivity 类的原因。

现在的问题是,你为什么要这样做?意味着,为什么你需要 制作一个 baseActivity 类,然后将您的其他活动作为 它的子类?

好吧,这里有几个非常笼统的原因

1. 您可以避免应用程序常见的 ui 任务的代码重复。假设您想在不同的活动中显示 progressDialog。只需编写代码以在您的 baseActivity 中显示一个 progressDialog 并从其他活动中调用该方法。

2. 您的应用程序菜单应在不同应用程序中保持一致。例如,您有一个设置屏幕。选项菜单包含导航到设置屏幕。您应该在整个应用程序中显示设置,这意味着无论活动如何。用户希望从应用程序的任何位置访问设置屏幕。这个功能很容易实现,但是您必须在每个活动中覆盖 onCreateOptionsMenu,或者您可以在 baseActivity 中覆盖一次。

【讨论】:

  • 我明白这一点,我要问的是,即使我使用常规类而不是抽象类作为 BaseActivity,这一切也会发生。那么使用抽象类有什么根本原因吗?
  • @Deepak 抽象类可能不会被实例化,并且需要子类来提供抽象方法的实现。这就是我将类定义为抽象的原因
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 2013-12-18
相关资源
最近更新 更多