动态添加片段

时间:2013-10-24 08:41:03

标签: android android-fragments

我很困惑。根据{{​​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)"错误消息?

4 个答案:

答案 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();