android - 从单独的 myJavaClass.java 完成 Activity()

标签 android android-intent

我已经尝试了几乎所有来自 SO 的解决方案,但没有成功:(。

我有一个带有几个函数的简单 myJavaClass.java。

myJavaClass 中的函数之一:startActivity() 启动 MyCustomActivity

public startActivity(Context context)
{
    Intent intent = new Intent(context, MyCustomActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_SINGLE_TOP);
    context.startActivity(intent);

这会按预期启动 MyCustomActivity()。

现在我在 myJavaClass.java 中有另一个函数来关闭/完成 MyCustomActivity 但它不能这样做!

我试过了

  1. 在 list 中制作 MyCustomActivity SingleTop 并通过上述 Intent 创建 Activity

  2. 将 Activity 实例传递给 MyCustomActivity 的 onCreate() 中的“this”并从 myJava.class 调用 MyCustomActivity.activity.finish(),但这也不起作用

请帮帮我。我已经被困在这里几个小时了。我知道解决方案非常简单和概念化,但我是新手。只是构建 Java/Android 概念!

编辑

我的自定义 Activity

public Activity activity;

OnCreate()
{
    ...
    this = activity;
}

我的Java类

public closeActivity(Context context)
{

        Activity customActivity = MyCustomActivity.activity;
        customActivity.finish();
}

最佳答案

我认为您尝试做的事情从根本上来说是不好的。首先,在 Activity 代码之外,无法保证 Activity 仍然存在 - 内存管理器可能已经清理它,用户可能已经按下返回等。将 Activities 视为独立的实体 - 你可以启动它们,并且您可以选择在他们完成他们正在做的事情时返回结果,仅此而已。

想想您是否真的必须从外部以编程方式关闭 Activity - 我会说这是一个不寻常的设计,但在某些情况下它可能是合适的。

如果是这样,我认为您想要的是一个发布/订阅系统,MyCustomActivity 可以通过该系统向 MyJavaClass 注册一个监听器,然后接收一个回调,然后它可以“完成”自己。

public Activity activity implements FinishListener
{
  public void onCreate(...)
  {
      //where does MyJavaClass come from? see in a minute
      MyJavaClass myjava = getMyJavaclass();

      myJava.addFinishListener( this );
  }

  public void onFinishCallback()
  {
      this.finish();
  }
}

   public class MyJavaClass
   {
      private List<FinishListener> finishListeners = ...;

      public void addFinishListener( FinishListener fl )
      {
         this.finishListeners.add(fl);
      }

      public closeActivity(Context context)
      {
         for ( FinishListener fl : finishListeners )
         {
            fl.onFinishCallback();
         }
      }
   }

   public interface FinishListener
   {
       void onFinishCallback();
   }

现在唯一剩下的问题是如何从 Activity 中获取 MyJavaClass。这取决于您 - 您可能已经知道如何,您可以将它放在您的应用程序实现中,它可以是单例(不好),监听器可以是静态的(不好)或各种其他选项。

哦,别忘了在 Activity 的 onDestroy() 方法中再次移除监听器!

关于android - 从单独的 myJavaClass.java 完成 Activity(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9977881/

相关文章:

android - 如何在 Jetpack Compose @Preview 中计算 WindowSizeClass

java - 分数计数器不增加

java - 使用 PendingIntent 停止服务

android - Android 测试示例应用程序

android - 非常简单的代码,但是使用 Fragment 时出现错误 "Activity has been destroyed"

android - android studio 不识别 Activity 继承

java - 在哪里调用创建通知方法?

java - Java 中是否有等同于 JSON.Net 的东西?

java - 启动 Intent 查看器以显示来自 url 的图像

java - 在不同的任务中启动一个新的 Android Activity