我几乎尝试了所有的解决方案,但都没有成功:(。
我有一个带两个函数的简单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()
方法中再次删除侦听器!