如何获取当前可见 activity 的引用而不将其作为参数传递给其他 class
How to get reference of currently visible activity without passing it as parameter to other class
正如标题所说,我想获取当前可见的 activity 的引用,或者您可以说 activity 位于 backstack
的顶部,来自 class,我不想发送 activity 对那个 class 的引用,因为我在许多活动中使用那个 class,如果我这样做,我必须通过 activity来自每个 activity 的参考,这是一个漫长的过程。
我已经看到很多答案都在对 activity 的上下文引用进行类型转换,但它不起作用。
如果有人知道如何快速做到这一点,请分享。
我不知道你所说的"long process"是什么意思。
通常,如果 Activity
将工作委托给另一个 class,它需要将自己作为引用传递,以便委托人知道如何回调 Activity
进行报告进度等。这是标准 Android 内容。 AsyncTask
像这样工作(作为示例)。
但是,如果您只想显示一个 Dialog
,那么您可以启动一个看起来像 Dialog
的 Activity
。这也是一个非常常见的 Android 解决方案。您可以将一些主题应用于 Activity
,使其看起来像 Dialog
。
我找到了一种方法,我们可以做到这一点,在您的应用程序中 class 添加:registerActivityLifecycleCallbacks
(这将监听所有 activity 生命周期方法),如下所示:
public class MyApplication extends Application {
public static Activity currentActivity=null;
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle bundle) {
}
@Override
public void onActivityStarted(@NonNull Activity activity) {
currentActivity=activity;
}
@Override
public void onActivityResumed(@NonNull Activity activity) {
}
@Override
public void onActivityPaused(@NonNull Activity activity) {
}
@Override
public void onActivityStopped(@NonNull Activity activity) {
}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle bundle) {
}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {
}
});
}
}
然后像这样使用它:
if (MyApplication.currentActivity!=null){
// your code here
}
不要忘记将您的应用程序 class 添加到清单中:
<application
android:name=".MyApplication"
.../>
正如标题所说,我想获取当前可见的 activity 的引用,或者您可以说 activity 位于 backstack
的顶部,来自 class,我不想发送 activity 对那个 class 的引用,因为我在许多活动中使用那个 class,如果我这样做,我必须通过 activity来自每个 activity 的参考,这是一个漫长的过程。
我已经看到很多答案都在对 activity 的上下文引用进行类型转换,但它不起作用。
如果有人知道如何快速做到这一点,请分享。
我不知道你所说的"long process"是什么意思。
通常,如果 Activity
将工作委托给另一个 class,它需要将自己作为引用传递,以便委托人知道如何回调 Activity
进行报告进度等。这是标准 Android 内容。 AsyncTask
像这样工作(作为示例)。
但是,如果您只想显示一个 Dialog
,那么您可以启动一个看起来像 Dialog
的 Activity
。这也是一个非常常见的 Android 解决方案。您可以将一些主题应用于 Activity
,使其看起来像 Dialog
。
我找到了一种方法,我们可以做到这一点,在您的应用程序中 class 添加:registerActivityLifecycleCallbacks
(这将监听所有 activity 生命周期方法),如下所示:
public class MyApplication extends Application {
public static Activity currentActivity=null;
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle bundle) {
}
@Override
public void onActivityStarted(@NonNull Activity activity) {
currentActivity=activity;
}
@Override
public void onActivityResumed(@NonNull Activity activity) {
}
@Override
public void onActivityPaused(@NonNull Activity activity) {
}
@Override
public void onActivityStopped(@NonNull Activity activity) {
}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle bundle) {
}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {
}
});
}
}
然后像这样使用它:
if (MyApplication.currentActivity!=null){
// your code here
}
不要忘记将您的应用程序 class 添加到清单中:
<application
android:name=".MyApplication"
.../>