我已尝试过几乎所有解决方案,但没有成功:(。
我有一个简单的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但是它无法这样做!
我试过了
在清单中制作MyCustomActivity SingleTop并通过上述意图创建活动
将活动实例传递给MyCustomActivity的onCreate()中的“this”,并从myJava.class调用MyCustomActivity.activity.finish(),但这也不起作用
请帮帮我。我已经被困在这里几个小时了。我知道解决方案非常简单和概念,但我是一个新手。只需构建Java / Android概念!
修改
MyCustomActivity
public Activity activity;
OnCreate()
{
...
this = activity;
}
MyJavaClass
public closeActivity(Context context)
{
Activity customActivity = MyCustomActivity.activity;
customActivity.finish();
}
答案 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();