2012-06-25 52 views
0

我目前正在開發一個android項目,並且我有一個活動,可以稱之爲MyActivity,並且此活動調用一個名爲MyClass的標準Java類。完成標準java類的活動

我需要MyClass的完成MyActivity活動,但我不能找出如何做到這一點。我想我可能能夠將上下文傳遞給標準java類並調用context.finish(),但這似乎不可用。

我該如何做到這一點,感謝您提供的任何幫助。

回答

2

可以通過Context,但你需要將其轉換爲Activity(或者只是通過Activity本身),雖然這在一般的似乎是一個不好的做法。

1

傳遞MyActivityMyClassActivity。從那裏,你可以撥打myActivity.finish();

例如:

private Activity myActivity; 

public MyClass(Activity myActivity){ 
    this.myActivity = myActivity; 
} 

public void stopMyActivity(){ 
    myActivity.finish(); 
} 

而且在MyActivity

MyClass myClass = new MyClass(this); 

這是有風險的,因爲你持有一個參考的Activity,這可能會導致內存泄漏。

+0

+1因泄漏問題 – gobernador

0

如果你的java類是一個嵌套的內部類,你可以使用:

public class MyActivity extends Activity { 

    public static class JavaClass {  

     public void finishActivity() { 
      MyActivity.finish(); 
     } 
    }  
} 

否則,你就必須通過Java類中的Context(即它傳遞給this一個參考,因爲Activity extends Context)和將其存儲爲私有實例變量。

2

最安全的解決方案使用監聽器和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添加我忘了聲明並初始化它。