用Fragment Layout替换Activity布局

时间:2014-05-07 16:46:43

标签: android

我有一个活动,在邮件布局中我有按钮 点击该按钮我想用片段布局替换整个活动布局

我该怎么做??

3 个答案:

答案 0 :(得分:2)

替换Activity布局的最简单方法是创建Container Parent layout并将其设置为Activity的内容,然后将Fragment添加到container Layout }

 // create a frame layout
 FrameLayout fragmentLayout = new FrameLayout(this);
 // set the layout params to fill the activity 
 fragmentLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
 // set an id to the layout
 fragmentLayout.setId(1000); // some positive integer
 // set the layout as Activity content
 setContentView(fragmentLayout);
 // Finally , add the fragment
  getSupportFragmentManager()
        .beginTransaction()
        .add(1000,new TestFragment()).commit();  // 1000 - is the id set for the container layout

答案 1 :(得分:1)

使用Libin's answer的引用: 他的回答给出了以下错误:类型ID的预期资源。因此,请遵循以下程序

在名为ids

的值中创建资源文件
<resources>
    <item name="fragmentLayout" type="id"/>
</resources>

使用此ID引用布局的ID。

// create a frame layout
FrameLayout fragmentLayout = new FrameLayout(this);
// set the layout params to fill the activity 
fragmentLayout.setLayoutParams(new  ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
// set an id to the layout
fragmentLayout.setId(R.id.fragmentLayout); // some positive integer
// set the layout as Activity content
setContentView(fragmentLayout);
// Finally , add the fragment
getSupportFragmentManager().beginTransaction().add(R.id.fragmentLayout,new TestFragment()).commit(); 

获取生成布局的id的另一种方法是fragmentLayout.setId(View.getGeneratedId());。但是使用此方法访问活动之外的片段的id是有问题的。因此,我会推荐上述方法。

答案 2 :(得分:0)

假设您的Activity布局类似于:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</FrameLayout>

您可以使用FrameLayout

替换Fragment的内容
getFragmentManager()
        .beginTransaction()
        .replace(R.id.container, fragment)
        .commit();

如果您希望能够按下&#39;返回&#39;要删除该片段,请将addToBackStack(null)添加到FragmentTransaction。有关详细信息,请参阅docs