我已经尝试了几乎所有来自 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 但它不能这样做!
我试过了
在 list 中制作 MyCustomActivity SingleTop 并通过上述 Intent 创建 Activity
将 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/