2013-10-24 99 views
7

我徹底糊塗了。據thisthis以及衆多其他來源,無論是在SO和其他地方,我應該能夠做到以下幾點:添加片段動態

import android.os.Bundle; 
import android.app.Activity; 
import android.app.FragmentTransaction; 
import android.view.Menu; 

public class MainScreenActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_screen); 
    MainRightFragment mrf = new MainRightFragment(); 
    RecommendedFragment rf = new RecommendedFragment(); 

    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.add(R.id.main_search_boxes, mrf, "fragmentright"); 
    ft.add(R.id.main_left_side, rf, "fragmentreccomend"); 
} 

}

的R.id引用指向的FrameLayout對象在我的。 xml文件。爲什麼我仍然得到「Add方法(INT,片段,字符串)在類型FragmentTransaction不適用於參數(INT,RecommendedFragment,字符串)」的錯誤消息?

+1

你肯定RecommendedFragment延伸片段? 它只適用於一個片段嗎?你是否嘗試在兩者之間進行溝通? – Poutrathor

回答

8

MainScreenActivity應該延伸FragmentActivity並不僅僅是Activity。 另外,不要忘記調用ft.commit();

0

試試這個。

FragmentManager fm = getFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.add(FragmentA.this.getParent().getID(), mNewFragment,"your frame name"); 
ft.addToBackStack(null); 
ft.commit(); 
+0

在你的例子中,FragmentA是一個類還是一個實例?在兩種情況下我能得到你的代碼編譯:( –

+0

@AharonManne:在上面的代碼替換'與mNewFragment'你,你使用'MainRightFragment MRF =新MainRightFragment()發起MRF'Fragment';' –

+1

@AharonManne:FragmentA是父片段。順便說一句,請按'取代'Activity' FragmentActivity' –

1

這是一個比答案更投降,但我能夠得到我想要使用FragmentActivity/support.v4.app。我仍然不明白爲什麼上面引用的引用似乎表示可以在現代API中使用.add(...)函數。
兩個harsha.cs和達米安點FragmentActivity,所以直到有人解釋了爲什麼需要使用向後兼容的API,我會給這兩個點,並暫緩檢查答案。

3

在運行時添加的片段,你需要從擴展您的主要活動:android.support.v4.app.FragmentActivity

而且你需要使用類FragmentManager和FragmentTransaction從android.support.v4 .app包,而不是android.app。

而且,當你得到FragmentManager使用的方法getSupportFragmentManager()。請參見下面的代碼:

FragmentManager fm = getSupportFragmentManager(); 

FragmentTop fragTop = new FragmentTop(); 
FragmentLeft fragLeft = new FragmentLeft(); 

FragmentTransaction ft = fm.beginTransaction(); 

ft.add(R.id.fragTop, fragTop); 
ft.add(R.id.fragLeft, fragLeft); 

ft.commit(); 

參考:http://developer.android.com/intl/pt-br/training/basics/fragments/fragment-ui.html