我目前正在开发一个Android项目,我有一个活动,我们称之为MyActivity,这个活动调用一个名为MyClass的标准Java类。
我需要MyClass来完成MyActivity活动,但我找不到如何做到这一点。我以为我可以将上下文传递给标准java类并调用context.finish(),但这似乎不可用。
我该怎么做呢,感谢您提供的任何帮助。
答案 0 :(得分:2)
您可以传递Context
,但您需要将其投放到Activity
(或简单地传递Activity
本身),尽管如此将军似乎是一种不好的做法。
答案 1 :(得分:2)
最安全的解决方案使用侦听器和处理程序。它很复杂,但确保非直接调用以完成活动。
你的听众:
interface OnWantToCloseListener{
public void onWantToClose();
}
应该关闭活动的类。
class MyClass {
private OnWantToCloseListener listener;
public void setWantToCloseListener(OnWantToCloseListener listener){
this.listener = listener;
}
private void fireOnWantToClose(){
if(this.listener != null)
listener.onWantToClose();
}
}
如果要关闭活动,则必须调用fireOnWantToClose()方法。
public MyActivity extends Activity{
public void onCreate(){
final int CLOSE = 1; //number to identify what happens
MyClass my_class = new MyClass();
final Handler handler = new Handler(){
public void handleMessage(Message msg){
if(msg.what == CLOSE)
MyActivity.this.finish();
}
});
my_class.setOnWantToCloseListener(new OnWantToCloseListener(){
public void onWantToClose(){
handler.sendEmptyMessage(CLOSE);
}
});
}
}
这是安全的,因为Activity不是由MyClass对象直接完成的,它是通过命令处理程序完成活动的侦听器完成的。即使你在第二个线程上运行MyClass对象,这段代码也会很好用。
编辑:CLOSE var添加我忘记声明并初始化它。
答案 2 :(得分:1)
将MyActivity
传递给MyClass
Activity
。从那里你可以拨打myActivity.finish();
例如:
private Activity myActivity;
public MyClass(Activity myActivity){
this.myActivity = myActivity;
}
public void stopMyActivity(){
myActivity.finish();
}
在MyActivity
:
MyClass myClass = new MyClass(this);
这是有风险的,因为你持有Activity
的引用,这可能会导致内存泄漏。
答案 3 :(得分:0)
如果您的java类是嵌套的内部类,则可以使用:
public class MyActivity extends Activity {
public static class JavaClass {
public void finishActivity() {
MyActivity.finish();
}
}
}
否则你必须传递java类Context
(即传递this
的引用,因为Activity extends Context
)并将其存储为私有实例变量。