非Activity類中呼叫Activity方法
阿新 • • 發佈:2019-01-28
專案中遇到一個問題,要在非Activity的類中呼叫Activity的setResult()方法,通過好友和CSDN網友的幫助終於解決了,感謝!
解決地址:http://bbs.csdn.net/topics/390911138
我的實現方式:
在類中定義Context,並在建構函式中初始化
private Context mContext;
......
private PaAccountManager(Context context) {
mContext = context;
contentResolver = mContext.getContentResolver();
}
定義Activity
然後就可以用activity呼叫Activity類的方法了public Activity activity = null; public void setActivity(Activity act) { this.activity = act; }
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 變數