android - 管理当前的 View 和 Class<?> 对象

标签 android class view android-notifications android-snackbar

我有一个应用程序范围的实用程序类 AppUtils,我可以在其中随时发布应用程序相关信息:

  1. 作为 SnackBar,当我在应用程序中时
  2. 或通过通知管理器

例如,当消息作为 Snackbar 运行时,我需要当前显示的 View 容器的轨道,以便在 Snackbar.make(view, text, length); 中使用它 当我想通过 NotificationManager.notify(int, Builder); 发布该消息时,我需要 here 中的类签名

Intent resultIntent = new Intent(this, ResultActivity.class);

因此我的 AppUtils 中有:

public static void setCurrentViewAndClass(View v, Class<?> c)
{
    view = v; // view is static
    cls = c;  // cls is static
}

我可以从项目的任何地方记住当前 View (对于 Snackbar 参数)和 cls(对于通知 Intent )。

进一步,我清除了那些参数,例如当我将应用程序留在后台时:

public static void clearCurrentViewAndClass()
{
    view = null;
    cls = null;
}

一个。当这些参数为 NOT null 时,我知道我的应用程序具有相应 View 的焦点,并且我可以将相关消息显示为 Snackbar。 B. 当这些参数为null时,我知道我的应用程序在后台,我想将相关消息显示为通知

因此,无论何时创建或恢复 Fragment/Activity,我都会在每个 onResume() 中调用 setClassAndview() 来记住参数。

是否有更优雅的方式来跟踪当前显示的 Activity 或 Activity 类?

最佳答案

例如...创建一个在 AndroidManifest 中注册的应用程序类 (MyApp):

<application
        android:name=".MyApp"
        ...>

在 MyApp 应用类 .onCreate() 中设置:

registerActivityLifecycleCallbacks(new MyAppActivityLifecycleCallbacks());

在 MyApp 中,创建一个静态字段,用于保存可见 Activity 的计数以及用于确定应用程序是否在前台的方法:

private static int mActivityCount = 0;

public static boolean isAppInForeground() {
    return mActivityCount != 0;
}

最后设置您的 ActivityLifecycleCallbacks 类以保持可见 Activity 的计数:

private static final class MyAppActivityLifecycleCallbacks implements ActivityLifecycleCallbacks {

        public void onActivityCreated(Activity activity, Bundle bundle) {
            // No operations
        }

        public void onActivityDestroyed(Activity activity) {
            // No operations
        }

        public void onActivityPaused(Activity activity) {
            // No operations
        }

        public void onActivityResumed(Activity activity) {
            // No operations
        }

        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
            // No operations
        }

        public void onActivityStarted(Activity activity) {
            mActivityCount++;
        }

        public void onActivityStopped(Activity activity) {
            mActivityCount--;
        }
    }

现在您应该可以调用 MyApp.isAppInForeground() 来确定您的任何 Activity 当前是否在前台。如果您需要对当前可见 Activity 的引用,您也可以在这里处理。

关于android - 管理当前的 View 和 Class<?> 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40266618/

相关文章:

android - 带有分页架构组件的初始占位符

android - 使用 XML 填充 SQLite 并集成到 Activity 内部

java - 无法在java服务器和android客户端之间建立连接

javascript - javascript 中的 python 风格的类变量

java - Dropwizard - 如何从 View 进行服务器端重定向?

java - 该配置引用了未知类 'String'

java - 银行账户转账项目 Java

class - 在类内部访问类

ios - iOS 上流畅的全屏 View 转换

python - 如何在 Microsoft Access 数据库中创建查询对象?