我几乎尝试了所有的解决方案,但都没有成功:(。
我有一个带两个函数的简单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,但是它不能这样做!
我试过了
在manifest中使mycustomactivity成为singletop并通过上述意图创建活动
在mycustomactivity的oncreate()中向“this”传递一个活动实例,并从myjava.class调用mycustomactivity.activity.finish(),但这并不起作用
请帮帮我。我被困在这里好几个小时了。我知道解决方案很简单,很有概念,但我是个新手。只需构建Java/Android概念!
编辑
我的客户活动
public Activity activity;

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

米雅瓦拉斯
public closeActivity(Context context)
{

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

最佳答案

我认为你想做的根本就是坏事。首先,在活动代码之外,无法保证活动仍然存在—内存管理器可能已经清理了它,用户可能已经按下了后退键等。将活动视为独立的实体—您可以启动它们,并且可以选择在它们结束时返回结果。他们在做什么,但就是这样。
考虑一下您是否真的必须从外部以编程方式关闭活动—我认为这是一个不寻常的设计,但在某些情况下可能是适当的。
如果是这样的话,我想您需要的是一个发布/订阅系统,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();
   }

现在剩下的唯一问题是如何从活动中获取myjavaclass。这取决于您—您可能已经知道如何将它放入应用程序实现中,它可能是单例的(坏),监听器可能是静态的(坏)或各种其他选项。
哦,别忘了在活动的onDestroy()方法中再次删除侦听器!

07-27 19:19