FragmentTransaction.replace()不移除之前的fragment

    xiaoxiao2022-07-15  141

    今天在看《第一行代码Android》第四章fragment的介绍,照着书上的例子写了一遍代码,可是发现了问题,在使用FragmentTransaction.replace()方法时不替换掉先前的Fragment,而是让之后的Fragment覆盖在之前的Fragment上。书上的代码大致如下: MainActivity:

    public class MainActivity extends Activity { ImageView iv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button fragment_left=(Button) findViewById(R.id.leftbutton); fragment_left.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub AnotherFragmentRight fr=new AnotherFragmentRight();//获取待添加的fragment实例 FragmentManager fm=getFragmentManager();//获取到一个FragmentManger FragmentTransaction ft=fm.beginTransaction();//开启一个事务 ft.replace(R.id.rightLayout, fr); ft.addToBackStack(null);//将一个事务添加到一个返回栈中,按back键后返回到之前的fragment中 ft.commit(); } }); }

    activity_main.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:baselineAligned="false" tools:context="${relativePackage}.${activityClass}" > <fragment android:id="@+id/fragment_left" android:name="com.example.fragmenttest.FragmentLeft" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <FrameLayout android:id="@+id/rightLayout" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4" > <fragment android:id="@+id/fragment_right" android:name="com.example.fragmenttest.FragmentRight" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> </LinearLayout>

    效果是这样的:图上两行字重叠在了一起 于是我检查了一遍代码,感觉与书上差别不大,后来在网上查了好久才找到问题所在。在activity_main.xml中,FrameLayout中不要加入Fragment,在代码中用FragmentTransaction.add()方法动态加入。代码如下: activity_main.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:baselineAligned="false" tools:context="${relativePackage}.${activityClass}" > <fragment android:id="@+id/fragment_left" android:name="com.example.fragmenttest.FragmentLeft" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <FrameLayout android:id="@+id/rightLayout" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4" > </FrameLayout> </LinearLayout>

    MainActivity:

    public class MainActivity extends Activity { ImageView iv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button fragment_left=(Button) findViewById(R.id.leftbutton); FragmentRight fragment=new FragmentRight(); FragmentManager fm=getFragmentManager();//获取到一个FragmentManger FragmentTransaction ft=fm.beginTransaction();//开启一个事务 ft.add(R.id.rightLayout, fragment); ft.commit(); fragment_left.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub AnotherFragmentRight fr=new AnotherFragmentRight();//获取待添加的fragment实例 FragmentManager fm=getFragmentManager();//获取到一个FragmentManger FragmentTransaction ft=fm.beginTransaction();//开启一个事务 ft.replace(R.id.rightLayout, fr); ft.addToBackStack(null);//将一个事务添加到一个返回栈中,按back键后返回到之前的fragment中 ft.commit(); } }); } }

    现在一切OK了,程序运行截图:

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)