当添加一个片段时,活动布局不会改变

问题描述:

我有一个活动,当点击一个按钮时,它会添加一个全屏幕片段。 这是我的活动的XML:当添加一个片段时,活动布局不会改变

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="clyky.cartracker.activities.AddVehicleActivity" 
    android:id="@+id/addVehicleContainer"> 
    <TableRow> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/lblPlate" 
      android:text="Targa" 
      android:labelFor="@+id/txtPlate"/> 
     <EditText 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      android:id="@+id/txtPlate" 
      android:inputType="text" 
      android:hint="Targa del veicolo"/> 
    </TableRow> 
    <TableRow> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/lblKm" 
      android:text="Chilometri" 
      android:labelFor="@+id/txtPlate"/> 
     <EditText 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      android:id="@+id/txtKm" 
      android:inputType="number" 
      android:hint="Chilometraggio"/> 
    </TableRow> 
    <TableRow> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/lblInUse" 
      android:labelFor="@+id/chckbxInUse" 
      android:text="In uso:"/> 

     <CheckBox 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/chckbxInUse"/> 
    </TableRow> 
    <TableRow> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/lblInsuranceDate" 
      android:labelFor="@+id/txtInsuranceDate" 
      android:text="Data di assicurazione:"/> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/txtInsuranceDate" 
      android:text=""/> 

     <Button 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:id="@+id/btnShowDatePickerForInsuranceDate" 
      android:onClick="showDatePicker" 
      android:text="Seleziona" 
      android:tag="0"/> 
    </TableRow> 
    <TableRow> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/lblMatriculationDate" 
      android:labelFor="@+id/txtMatriculationDate" 
      android:text="Data d'immatricolazione:"/> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/txtMatriculationDate" 
      android:text=""/> 

     <Button 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:id="@+id/btnShowDatePickerForMatriculationDate" 
      android:onClick="showDatePicker" 
      android:text="Seleziona" 
      android:tag="1"/> 
    </TableRow> 
    <TableRow> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/lblEffectiveFuelEconomy" 
      android:labelFor="@+id/txtEffectiveFuelEconomy" 
      android:text="Consumo di carburante (km/l):"/> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/txtEffectiveFuelEconomy" 
      android:inputType="number"/> 
    </TableRow> 
    <TableRow> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/lblMake" 
      android:labelFor="@+id/txtLastInspectionDate" 
      android:text="Produttore:"/> 

     <Spinner 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/spnrMake"/> 
    </TableRow> 
    <TableRow> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/lblModel" 
      android:labelFor="@+id/spnrModel" 
      android:text="Modello:"/> 

     <Spinner 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/spnrModel"/> 
    </TableRow> 
    <TableRow> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/lblTrim" 
      android:labelFor="@+id/spnrTrim" 
      android:text="Assetto:"/> 

     <Spinner 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/spnrTrim"/> 
    </TableRow> 
    <TableRow> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/btnShowInspectionDates" 
      android:text="Aggiungi date di revisione" 
      android:onClick="showInspectionDatesFragment"/> 
    </TableRow> 
    <TableRow> 
     <Button 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:id="@+id/btnSubmit" 
      android:onClick="submit" 
      android:text="Invia"/> 
    </TableRow> 
</TableLayout> 

这是其改变时被点击btnShowInspectionDates片段的方法,包括:

public void showInspectionDatesFragment(View v) 
{ 
    InspectionDatesFragment f = InspectionDatesFragment.newInstance(null); 
    Utilities.addFragment(R.id.addVehicleContainer, f, null, getSupportFragmentManager()); 
} 

Utilities.addFragment简单地执行所述片段的事务(它创建一个FragmentTransaction对象,调用其上的方法为add,并执行交易提交)。

这是我InspectionDatesFragment布局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <include layout="@layout/recycler_view_fragment_layout"/> 

    <Button 
     android:id="@+id/btnAddInspectionDate" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:text="+"/> 
</LinearLayout> 

recycler_view_fragment_layout只是包含RecyclerView一个LinearLayout里面,我在别人的布局包含一个RecyclerView以此为基地布局。

因此,当我点击btnShowInspectionDates时,手机上的布局似乎没有改变。我使用调试器来检查我的片段是否是通过在onCreatedView中放置断点来创建的,并且是的,它已成功创建,因为它不会抛出任何异常。 logcat似乎没有给出有用的东西,所以有谁知道如何解决我的问题?

在此先感谢!

编辑

现在,我已经创建了其中包含的我AddVehicleActivity以前的布局片段,然后我改变两个片段被点击btnShowInspectionDates时。但是现在我又遇到了另一个问题:btnAddInspectionDate未显示在我的InspectionDatesFragment中:视图完全是白色的。

inspection_dates_fragment_layout:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <include layout="@layout/recycler_view_fragment_layout"/> 

    <Button 
     android:id="@+id/btnAddInspectionDate" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:text="+"/> 
</LinearLayout> 

你在错误的容器添加。

在活动布局中,只保留碎片的容器。

创建一个更多的片段,该片段将具有当前活动所具有的布局,并将其添加到活动的片段容器中。

点击按钮,只需替换/添加要启动的片段。