我很困惑。根据{{3}} 和this和许多其他来源,无论是在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引用指向我的.xml文件中的FrameLayout对象。为什么我仍然得到" FragmentTransaction类型中的方法add(int,Fragment,String)不适用于参数(int,RecommendedFragment,String)"错误消息?
答案 0 :(得分:8)
您的MainScreenActivity
应该延伸FragmentActivity
,而不仅仅是Activity
。
另外,不要忘记致电ft.commit();
答案 1 :(得分:3)
要在运行时添加片段,您需要扩展主要活动: android.support.v4.app.FragmentActivity
你需要使用 android.support.v4.app 包中的FragmentManager和FragmentTransaction类,而不是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
答案 2 :(得分:1)
这更像是投降而不是答案,但我能够使用FragmentActivity / support.v4.app获得我想要的东西。我仍然不明白为什么我上面引用的参考文献似乎说可以将.add(...)函数与现代API一起使用。
harsha.cs和Damien都指向FragmentActivity,所以在有人解释为什么有必要使用向后兼容性API之前,我会给出这两点,并推迟检查答案。
答案 3 :(得分:0)
试试这个。
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(FragmentA.this.getParent().getID(), mNewFragment,"your frame name");
ft.addToBackStack(null);
ft.commit();