簡體   English   中英

從片段調用活動方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM