我目前正在開發一個android項目,並且我有一個活動,可以稱之爲MyActivity,並且此活動調用一個名爲MyClass的標準Java類。完成標準java類的活動
我需要MyClass的完成MyActivity活動,但我不能找出如何做到這一點。我想我可能能夠將上下文傳遞給標準java類並調用context.finish(),但這似乎不可用。
我該如何做到這一點,感謝您提供的任何幫助。
我目前正在開發一個android項目,並且我有一個活動,可以稱之爲MyActivity,並且此活動調用一個名爲MyClass的標準Java類。完成標準java類的活動
我需要MyClass的完成MyActivity活動,但我不能找出如何做到這一點。我想我可能能夠將上下文傳遞給標準java類並調用context.finish(),但這似乎不可用。
我該如何做到這一點,感謝您提供的任何幫助。
您可以通過Context
,但你需要將其轉換爲Activity
(或者只是通過Activity
本身),雖然這在一般的似乎是一個不好的做法。
傳遞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
,這可能會導致內存泄漏。
如果你的java類是一個嵌套的內部類,你可以使用:
public class MyActivity extends Activity {
public static class JavaClass {
public void finishActivity() {
MyActivity.finish();
}
}
}
否則,你就必須通過Java類中的Context
(即它傳遞給this
一個參考,因爲Activity extends Context
)和將其存儲爲私有實例變量。
最安全的解決方案使用監聽器和Handler。這很複雜,但確保不直接致電完成活動。
你的聽衆:
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);
}
});
}
}
這是安全的,因爲活動不是由MyClass的對象直接完成,它是通過訂單處理程序,完成活動的監聽器完成。即使您在第二個線程上運行MyClass對象,此代碼也可以很好地工作。
編輯:關閉var添加我忘了聲明並初始化它。
+1因泄漏問題 – gobernador