2013-10-24 100 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