我有点像Android碎片的菜鸟,所以希望有人可以轻松指出我的错误。我从头开始构建一个非ActionBar应用程序,以获得一个包含三个片段的MainActivity(使用在线教程)。我的片段由MainActivity上的三个按钮控制,此片段持有者和按钮的XML为:
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment
android:id="@+id/theFragment"
android:name="org.mypackage.FragmentOne"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<LinearLayout
android:id="@+id/bottomSection"
android:layout_width="fill_parent"
android:layout_height="70.0dip"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom"
android:background="@android:color/white"
android:orientation="horizontal">
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:color/white">
<ImageButton
android:id="@+id/button1"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_alignParentLeft="true"
android:layout_marginBottom="7dip"
android:layout_marginLeft="50dip"
android:layout_marginTop="8dip"
android:adjustViewBounds="true"
android:background="@null"
android:onClick="selectFrag"
android:scaleType="fitCenter"
android:src="@drawable/offerbutton" />
<ImageButton
android:id="@+id/button3"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_alignParentRight="true"
android:layout_marginBottom="7dip"
android:layout_marginRight="50dip"
android:layout_marginTop="8dip"
android:adjustViewBounds="true"
android:background="@null"
android:onClick="selectFrag"
android:scaleType="fitCenter"
android:src="@drawable/talkbutton" />
</RelativeLayout>
</LinearLayout>
<ImageButton
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center"
android:layout_margin="5dip"
android:background="@android:color/transparent"
android:onClick="selectFrag"
android:padding="20dip"
android:paddingRight="20dip"
android:src="@drawable/floatingbutton"
android:text="Floating Button" />
</FrameLayout>
</RelativeLayout>
这些按钮在MainActivity中调用一个简单的selectFrag方法:
public void selectFrag(View view) {
Fragment fr;
switch (view.getId()) {
case R.id.button1:
fr = new FragmentOne();
break;
case R.id.button2:
fr = new FragmentTwo();
break;
case R.id.button3:
fr = new FragmentThree();
break;
default:
fr = new FragmentOne();
break;
}
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.theFragment, fr);
ft.addToBackStack(null);
ft.commit();
}
我开发了Fragment2和Fragment3,两者都具有中等复杂的XML布局,并且它们工作正常(按下按钮2,Fragment1消失,Fragment2出现,按钮3也相同)。我现在正在研究Fragment1的布局。目前,这是一个简单的持有人布局:
fragment_one.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="This is fragment No.1"
/>
</LinearLayout>
问题:当我尝试使fragment_one.xml更复杂时(包括新的LinearLayouts和其中的视图等),当我单击按钮移动到Fragment2或Fragment3时,此布局将永久显示在屏幕上。总之,Fragment2或Fragment3并没有完全删除Fragment1的布局。 Fragment2或3成功显示在屏幕上,但在“This is fragment No.1”textView。
下面我被困住了。有任何想法吗?我尝试使用<FrameLayout/>
代替<fragment/>
,但没有快速到达任何地方......
答案 0 :(得分:1)
这是正常行为。您实际上并没有替换片段,而更像是将它放在前一个片段之上。您可以做的是将片段2中的背景颜色设置为白色(或者您在应用程序中使用的默认背景),以便绘制片段1。
中还有更多相关信息通过在布局XML文件中定义片段将片段添加到活动布局时,无法在运行时删除片段。如果您计划在用户交互期间将片段交换进出,则必须在活动首次启动时将片段添加到活动中,如下一课所示。