我目前正在开发一个 android 项目并且我有一个活动,我们称之为 MyActivity,这个活动调用一个名为 MyClass 的标准 Java 类。
我需要 MyClass 来完成 MyActivity 活动,但我不知道如何做到这一点。我想我可能能够将上下文传递给标准 java 类并调用 context.finish() 但这似乎不可用。
我该怎么做,感谢您提供的任何帮助。
我目前正在开发一个 android 项目并且我有一个活动,我们称之为 MyActivity,这个活动调用一个名为 MyClass 的标准 Java 类。
我需要 MyClass 来完成 MyActivity 活动,但我不知道如何做到这一点。我想我可能能够将上下文传递给标准 java 类并调用 context.finish() 但这似乎不可用。
我该怎么做,感谢您提供的任何帮助。
最安全的解决方案使用侦听器和处理程序。它很复杂,但确保非直接调用完成活动。
你的听众:
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 添加了我忘记声明和初始化它。
您可以传递Context
,但您需要将其转换为Activity
(或简单地传递Activity
自身),尽管这通常看起来是一种不好的做法。
将MyActivity
toMyClass
作为Activity
. 从那里你可以打电话myActivity.finish();
例如:
private Activity myActivity;
public MyClass(Activity myActivity){
this.myActivity = myActivity;
}
public void stopMyActivity(){
myActivity.finish();
}
并在MyActivity
:
MyClass myClass = new MyClass(this);
这是有风险的,因为您持有对 an 的引用Activity
,这可能会导致内存泄漏。
如果你的 java 类是一个嵌套的内部类,你可以使用:
public class MyActivity extends Activity {
public static class JavaClass {
public void finishActivity() {
MyActivity.finish();
}
}
}
否则,您将不得不传递 java 类 a Context
(即传递一个对this
, since的引用Activity extends Context
)并将其存储为私有实例变量。