以编程方式将片段添加到现有ViewGroup

时间:2014-07-28 01:15:57

标签: java android android-fragments fragment

我正在尝试将新片段添加到当前ViewGroup而不在我的主布局中创建<fragment>,所以我这样做了: 创建了一个新的java类作为Fragment子类,并创建了它的布局&#34; R.layout.fraglayout&#34;:

public class FragOne extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fraglayout, container, false);
    }
}

现在,API的指南说我应该将这个新片段添加到ViewGroup,所以我使用FragmentTransaction并将其添加到main_activity onCreate:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //adding the fragment
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();

    FragOne newFrag = new FragOne();
    ft.add(R.layout.activity_main, newFrag);
    ft.commit();

    setContentView(R.layout.activity_main);
}

代码无效,这是我的问题: 文档说我应该将我的片段添加到当前的&#34; ViewGroup&#34;我希望我将它添加到布局中。那些是一样的吗?如果没有,那么ViewGoup id是什么?

1 个答案:

答案 0 :(得分:2)

例如,ViewGroup ID是FrameLayout布局中Activity的ID,即R.layout.activity_main。

使用transaction.add()时。将FrameLayout id作为第一个参数传递。

还有一件事,就在super.onCreate(savedInstanceState)之后调用setContentView();然后才加载你的片段。像这样:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//adding the fragment
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

FragOne newFrag = new FragOne();
ft.add(R.id.myContainerFrameLayout, newFrag);
ft.commit();

}