当添加一个片段时,活动布局不会改变
问题描述:
我有一个活动,当点击一个按钮时,它会添加一个全屏幕片段。 这是我的活动的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>
答
你在错误的容器添加。
在活动布局中,只保留碎片的容器。
创建一个更多的片段,该片段将具有当前活动所具有的布局,并将其添加到活动的片段容器中。
点击按钮,只需替换/添加要启动的片段。