【问题标题】:Finish Activity() from a separate myJavaClass.java从单独的 myJavaClass.java 完成 Activity()
【发布时间】:2012-04-02 14:00:10
【问题描述】:

我已经尝试了几乎所有 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. 在清单中创建 MyCustomActivity SingleTop 并通过上述意图创建活动

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

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

编辑

我的自定义活动

public Activity activity;

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

我的Java类

public closeActivity(Context context)
{

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

【问题讨论】:

  • 你能发布你的关闭函数吗?
  • myJavaClass.java如何关闭MyCustomActivity?你的意思是 myJavaClass.java 在单独的线程上运行吗?
  • 正如我所说,我可能在做一些概念上的错误,所以请多多包涵。我刚开始java/android。这是在高层次上发生的事情。 SMS Broadast 接收器侦听特定消息,如果被触发,它会调用 MyJavaClass(这是一个由所有函数组成的简单库类)的 startActivity()。这会通过 sn-p 中所示的意图成功启动 MyCustomActivity。现在假设同一个 SMSBroadcastReceiver 调用 closeActivity() 反过来应该完成() MyCustomActivity 正在显示(活动)
  • 我试图实施你的建议,但我得到了一个空监听器。请建议:stackoverflow.com/questions/9994298/…

标签: android android-intent


【解决方案1】:

我认为您尝试做的事情从根本上说是不好的。首先,在 Activity 代码之外,不能保证 Activity 仍然存在 - 内存管理器可能已清理它,用户可能已按下 Back 等。将 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() 方法中再次移除监听器!

【讨论】:

  • 不知何故我觉得这正是我正在寻找的东西。虽然我只得到了你所说的 60%,因为我是新手。我会谷歌并尝试了解其余的 40%。谢谢!
【解决方案2】:

试试这个....

public closeActivity(Activity _activity)
{
      _activity.finish();
}

【讨论】:

  • 你试过这个解决方案还告诉你如何调用这个函数
  • 但是closeActivity()从哪里获取参数_activity呢? closeActivity() 是 java 类中的一个函数,正在从 broadCastReceiver 调用。
  • 有任何解决方案需要帮助
【解决方案3】:

在获得该类中 Activity 实例的引用之前,您无法完成其他类的活动,在该类中提供引用并调用 finish() 方法来停止活动。

activity.finish();

【讨论】:

  • 我确实在 MyCustomActivity 的 onCreate() 中为“this”提供了一个实例/活动,然后从 MyJavaClass 引用它,但 finish() 不起作用。没有错误。它只是没有关闭活动!
猜你喜欢
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多