gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:32:54 24 4
gpt4 key购买 nike

我有一个应用程序范围的实用程序类 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com