定义 BaseActivity 的正确方法是什么

Dee*_*pak -1 android base abstract android-activity

这个问题专门针对Android和使用Activity可以由所有其他活动扩展的基础。总的来说,我了解 Java 的使用和功能abstract classes。我的情况是,我有一个基本活动,其中包含一些常用常量、函数并实现了一些Interfaces. 我的问题是应该这样abstract还是我可以让它保持正常Activity。是否有特定的原因abstract

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

//Usage 
public class MyActivity extends BaseActivity {
}
Run Code Online (Sandbox Code Playgroud)

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

//Non Abstract Class
public class BaseActivity extends Activity {
}
Run Code Online (Sandbox Code Playgroud)

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

Fen*_*tel 7

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

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

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

例如,

public abstract class MyAppBaseActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}
Run Code Online (Sandbox Code Playgroud)

和您的自定义活动

public class MyCustomActivity extends MyAppBaseActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

嗯,这里有几个非常普遍的原因

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

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