0

我正在構建一個包含多個頁面的應用程序,每個主頁面都顯示在主活動的片段中。每當用戶想要更改頁面時,活動內的片段都會更改。動態創建片段中的代碼問題

我想爲自己的java文件中的每個片段編寫代碼,而不是爲主活動中的所有片段編寫代碼。

我試過把片段的onCreate和onCreateView方法(包括嘗試onStart,onPause和整個其他負載)的代碼,但我注意到,當片段創建代碼只是不是運行。

我在這裏看到過類似問題的其他問題,但沒有一個答案爲我提供了一個實際的解決方案。

我的問題是,我該如何編寫該片段的java文件中的每個片段的代碼,並真正讓它運行?我知道如果我的片段是在活動中靜態創建的,但這些不是,它們是在運行時創建的,這會更容易。

僅供參考,每個片段顯示在活動像這樣:

fragmentManager.beginTransaction().replace(R.id.container, HomeFragment.newInstance(position)).commit(); 

回答

1

試試這個,
從主要活動,你可以調用你的片段類定義爲靜態方法

AuthFragment.NewInstance(LoginActivity.this, constantsObj); 

這行只會在您的片段調用活動。

在片段

現在,靜態方法內,發現和創造的片段,

public static void NewInstance(LoginActivity activityContext, Constants constantsObj) { 
    clsConstantsObj = constantsObj; 
    urlToCatch = clsConstantsObj.toString(); 
    urlToCatch = urlToCatch.replace("/params", ""); 

    FragmentManager fragmentManager; 
    FragmentTransaction fragmentTransaction; 
    activityContextInFragment = activityContext; 

    fragmentManager = activityContext.getSupportFragmentManager(); 

    AuthFragment findAuthFragment = (AuthFragment) fragmentManager 
      .findFragmentByTag("authFragment"); 

    if (findAuthFragment == null) { 
     AuthFragment authFragment = new AuthFragment(); 
     fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.mainviewRegionwise, authFragment, "authFragment"); 
     fragmentTransaction.commit(); 
    } 
} 

的通知「R.id.mainviewRegionwise」,這是你的主容器的id,這將可以是FrameLayout或任何其他容器。

+0

在這種情況下什麼是authFragment?那是一個佔位符片段或我正在創建此方法的片段?只是爲了澄清,第二塊代碼是在我試圖打開的片段中進行的? – ChrisTansey 2015-04-02 13:12:06

+0

1.在這種情況下什麼是authFragment?那是一個佔位符片段或我正在創建此方法的片段? ---> AuthFragment是您試圖動態創建的片段。 和代碼將進入調用活動或片段.... 2.只是爲了澄清,是代碼中的第二個代碼塊在我試圖打開的片段? --- >> 是的,你說的對,第二塊會去你的動態片段類 – 2015-04-03 06:00:42

+0

謝謝,這個工作。我昨天意識到,我確實犯了一個更大的錯誤,現在我已經修復了這個錯誤,但這幫助我把事情稍微提高一點。非常感謝。 – ChrisTansey 2015-04-03 14:20:57