[英]Call Activity Method From Fragment
我正在處理碎片。
我有一個Activity
和不同的fragments
。
每個fragment
需要訪問一個允許它訪問數據庫的Class(call it X)
,但是,因為我有很多片段,所以我不想在每個片段中創建一個不同的Class X
實例。認為它需要大量的memory
。
那我該怎么辦?
我寫了這樣的東西(帶有吸氣劑),但它不起作用!
public class MyActivity {
private ClassX classx;
.....
public ClassX getClassX() {
return classx;
}
.....
}
但是,我怎么能從fragment
調用它呢?
從片段中調用您的activity的方法
((MyActivity ) getActivity()).getClassX() ;
你需要做額外的演員:
Activity activity123 = getActivity();
if(activity123 instanceof ParentActivity) {
((ParentActivity) activity123).someMethodInParentActivity();
}
這有點像Java問題和android。
如果您正在查看訪問數據庫,請查看創建數據庫單例。
所以類似於:
public class Database {
// This starts off null
private static Database mInstance;
/**
* Singleton method, will return the same object each time.
*/
public static final Database getInstance() {
// First time this method is called by Database.getInstance() from anywhere
// in your App. It will create this Object once.
if(mInstance == null) mInstance = new Database();
// Returns the created object from a statically assigned field so its never
// destroyed until you do it manually.
return mInstance;
}
//Private constructor to stop you from creating this object by accident
private Database(){
//Init db object
}
}
然后,從您的片段和活動中,您可以將以下字段放在您的類中(更好地使用基本活動和片段來保存重復代碼)。
public abstract class BaseFragment extends Fragment {
protected final Database mDatabase = Database.getInstance();
}
然后你的具體片段可以擴展你的BaseFragment
例如SearchListFragment extends BaseFragment
希望這可以幫助。
問候,克里斯
定義一個名為Callbacks
的接口(如果需要,可以設置其他接口)。 在其中,有一個名為getClassX()
的公共方法。 然后讓您的Activity實現Callbacks
接口。
在你的片段中,在onAttach
,存儲對Callbacks
對象的引用(即你的活動,例如:
if(activity instanceof Callbacks)
mCallbacks = (Callbacks)activity;
這將保證Fragments能夠調用該函數。 (如果您希望稍后在另一個應用程序中重用這些片段)
然后在您的Activity中,在onCreate()
,創建一個ClassX
實例。 在你的getClassX()
方法中,只需返回對它的引用。
如果要從Fragments中引用它,請調用mCallbacks.getClassX()
並對其進行排序。
您可以在活動中使用靜態對象,並從片段中使用它,或者調用片段中的getActivity()方法來訪問整個活動對象/方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.