我疯了。我想动态地用一个片段替换另一个片段。
我在这样的活动中定义了一个mainLayout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/EstiloBase"
android:baselineAligned="false"
android:orientation="vertical">
<include
android:id="@+id/tool_bar_dashboard"
layout="@layout/toolbar" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="horizontal">
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="200dp"
android:layout_height="match_parent"
android:orientation="horizontal">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
<FrameLayout
android:id="@+id/calendar1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
我要替换的项目是FrameLayout。
在开始时,FrameLayout与这个片段紧密相关,并且一切正常:
FragmentTransaction t = getSupportFragmentManager().beginTransaction();
t.replace(R.id.calendar1, caldroidFragment);
t.commit();
然后,当我点击一个按钮时,它将被替换为:
case R.id.cambiarVista:
FragmentTransaction t = getSupportFragmentManager().beginTransaction();
t.replace(R.id.calendar1, new ListaEntrenamientos());
t.addToBackStack(null);
t.commit();
这个片段定义如下:
<FrameLayout 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"
tools:context="tfg.marcos.coachtrain.views.fragments.ListaEntrenamientos">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
</FrameLayout>
但是当我点击该按钮时,应用程序崩溃了,它没有向我显示任何消息。
我的错误是什么?我尝试了很多次与其他选项,但是是相同的。
感谢。
答案 0 :(得分:0)
FragmentManager
崩溃,因为calendar1
是FrameLayout
而不是fragment
。同时制作calendar1
和ListaEntrenamientos
Views
,或同时制作Fragments
。要么工作。我建议您制作Views
LinearLayout/FrameLayout
),并在屏幕上不需要时将Visibility
更改为GONE
。