如何在按下按钮时更改/替换片段?

时间:2015-02-21 17:23:10

标签: java android android-fragments

在学习片段时,我尝试制作一个简单的程序,在按钮点击时可以更改活动中的片段。虽然我的程序编译没有错误,但我无法在按钮单击时更改FrameLayout中的片段。有关如何通过单击按钮更改当前片段的任何建议吗?

这是我在MainActivity类中的逻辑:默认情况下,onCreate方法用fragment1的片段替换FrameLayout。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //You use the FragmentManager to replace the container with an fragment.
    //Get fragment manager
    FragmentManager fm = getSupportFragmentManager();
    //add
    FragmentTransaction ft = fm.beginTransaction();
    fragment1 frag1 = new fragment1();
    ft.add(R.id.fragment_container, frag1);
    //commit change
    ft.commit();
}

我有两个按钮,它们应该用它们各自的片段替换当前片段(get fragment1用fragment1替换当前片段,get fragment2用fragment2替换当前片段):

public void getfragment1(View view){
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(R.id.fragment_container,new fragment1());
}

public void getfragment2(View view){
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(R.id.fragment_container,new fragment2());
}

以下是MainActivity类的基本XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Open Fragment1"
    android:onClick="getfragment1"
    android:id="@+id/button"/>

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="getfragment2"
    android:text="Open Fragment2"
    android:id="@+id/button2"/>

<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</FrameLayout>

</LinearLayout>

1 个答案:

答案 0 :(得分:1)

如果我没弄错,你只是忘了提交片段交易。

尝试添加

ft.commit();

之后

ft.replace(R.id.fragment_container,new fragment2());