1. 程式人生 > >非Activity類中呼叫Activity方法

非Activity類中呼叫Activity方法

專案中遇到一個問題,要在非Activity的類中呼叫Activity的setResult()方法,通過好友和CSDN網友的幫助終於解決了,感謝!

解決地址:http://bbs.csdn.net/topics/390911138

我的實現方式:

在類中定義Context,並在建構函式中初始化

private Context mContext;
......
private PaAccountManager(Context context) {
		mContext = context;
		contentResolver = mContext.getContentResolver();
	}
定義Activity
public Activity activity = null;
    public void setActivity(Activity act) {
        this.activity = act;
    }
然後就可以用activity呼叫Activity類的方法了
Intent intent = new Intent();
intent.putExtra("result", "login_success");
activity.setResult(activity.RESULT_OK, intent);
activity.finish();
同時,要在PaWebViewActivity.java中加入下面的語句
PaAccountManager.getInstance(this).setActivity(this);
就像上面連結中說的,貼下程式碼,參考:
public class AActivity extends Activity ·{
  //宣告一個Bclass物件
  public Bclass bClass;
         
                
         public void onCreate(..) {
               bClass = new Bclass(this);
         }
                  
        public int methoda() {
                //do something
         }
}

public class Bclass {
        public AActivity aActivity = null;
        public Bclass(AActivity activity){
             aActivity = activity;
        }
        //我想在這裡面這樣用
        aActivity.methoda();
}

當然,還有這個,也是重點

最好不要令 Activity本身為 static, 這樣的話,系統進行資源回收的時候,判斷 該 Activity為 static, 就不會對他進行資源回收

你可以在非 Activity 類中,寫這麼一個方法.

public void setActivityCallback(Activity activity){
   this.aActiity = activity;
}

或者給非 Activity 新增一個包含 Activity 的構造方法
如:
public Bclass(Activity activity){
  this.aActivity = activity;
}

但是請注意不要在非 Activity 類中,將 Activity 定義為 static 變數