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

时间:2012-04-02 14:00:10

标签: android android-intent

我已尝试过几乎所有解决方案,但没有成功:(。

我有一个简单的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(),但这也不起作用

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

    修改

    MyCustomActivity

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

    MyJavaClass

    public closeActivity(Context context)
    {
    
            Activity customActivity = MyCustomActivity.activity;
            customActivity.finish();
    }
    

3 个答案:

答案 0 :(得分:7)

我认为你要做的事情从根本上说是糟糕的。首先,在Activity代码之外,不能保证活动仍然存在 - 内存管理器可能已经清理它,用户可能已经按下Back等。将活动视为独立实体 - 您可以启动它们,并且

,当他们完成他们正在做的事情时,您可以选择性地获得结果。

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

如果是这样,我认为你想要的是一个发布/订阅系统,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()方法中再次删除侦听器!

答案 1 :(得分:2)

试试吧......

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

答案 2 :(得分:2)

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

activity.finish();