如何在android中使用constraintSet在一个constraintLayout中显示具有不同组件和ID的不同xml布局

如何在android中使用constraintSet在一个constraintLayout中显示具有不同组件和ID的不同xml布局,android,xml,android-constraintlayout,constraintset,Android,Xml,Android Constraintlayout,Constraintset,我有一个片段,我需要展示,并通过一些步骤(在本例中,我有3个步骤)将一些XML布局融入其中,我知道我们可以简单地将布局包含到父片段布局中,只处理可见/消失的布局。但是我想用ConstraintLayout中的ConstraintSet来实现它。当我搜索将另一个XML布局加载到父XML布局时,每个XML布局中的两个根元素都必须是具有相同组件和相同ID的约束布局。但在我的示例中,我有不同的XML布局和根元素约束布局,但在每个XML布局中,我有不同的组件和ID。现在我的问题是如何根据步骤使用另一个XM

我有一个片段,我需要展示,并通过一些步骤(在本例中,我有3个步骤)将一些XML布局融入其中,我知道我们可以简单地将布局包含到父片段布局中,只处理可见/消失的布局。但是我想用ConstraintLayout中的ConstraintSet来实现它。当我搜索将另一个XML布局加载到父XML布局时,每个XML布局中的两个根元素都必须是具有相同组件和相同ID的约束布局。但在我的示例中,我有不同的XML布局和根元素约束布局,但在每个XML布局中,我有不同的组件和ID。现在我的问题是如何根据步骤使用另一个XML布局更改部分XML布局? 我们关心的是平滑这个布局和改变一些动画布局。这些是我的文件:

拾取碎片:

 class PickupFragment : BaseFragment<FragmentPickupBinding, PickupViewModel>
    (R.layout.fragment_pickup, PickupViewModel()) {

    private val primaryConstraintBody = ConstraintSet()
    private val parcelConstraintBody = ConstraintSet()
    private val senderConstraintBody = ConstraintSet()
    private val receiverConstraintBody = ConstraintSet()


    private val body by lazy { binding.body }


    private val pickupRequestStepObserver = Observer<Int> { step ->

        when (step) {

            0 -> parcelConstraintBody.loading(body)
            1 -> senderConstraintBody.loading(body)
            2 -> receiverConstraintBody.loading(body)
        }
    }


    override fun initVariables() {
        binding.viewModel = vModel
    }

    override fun initObserves() {
        vModel.pickupRequestStep.observe(this, pickupRequestStepObserver)
    }

    override fun initViews() {

        vModel.pickupRequestStep.value = 0

        primaryConstraintBody.clone(body)
        parcelConstraintBody.clone(context, R.layout.fragment_pickup_parcel)
        senderConstraintBody.clone(context, R.layout.fragment_pickup_sender)
        receiverConstraintBody.clone(context, R.layout.fragment_pickup_receiver)

    }

}
类PickupFragment:BaseFragment
(R.layout.fragment_拾取,PickupViewModel()){
private val primaryConstraintBody=ConstraintSet()
private val parcelConstraintBody=ConstraintSet()
private val senderConstraintBody=ConstraintSet()
私有val receiverConstraintBody=ConstraintSet()
惰性{binding.body}的私有val主体
private val pickupRequestStepObserver=观察者{step->
何时(步骤){
0->parcelConstraintBody.loading(主体)
1->发送器CONSTRAINTBODY.装载(车身)
2->接收约束主体。加载(主体)
}
}
重写变量(){
binding.viewModel=vModel
}
重写{
vModel.pickupRequestStep.observe(此为pickupRequestStepObserver)
}
覆盖视图(){
vModel.pickupRequestStep.value=0
primaryConstraintBody.clone(主体)
parcelConstraintBody.clone(上下文,R.layout.fragment\u pickup\u地块)
senderConstraintBody.clone(上下文,R.layout.fragment\u picku\u sender)
receiverConstraintBody.clone(上下文,R.layout.fragment\u拾取\u接收器)
}
}
碎片收集:

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

        <variable
            name="viewModel"
            type="com.chaparnet.chapar.views.pickup.PickupViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/body">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintBody"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </androidx.constraintlayout.widget.ConstraintLayout>

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

碎片提取包裹:

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <data>

        <variable
            name="viewModel"
            type="com.chaparnet.chapar.views.pickup.PickupViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintBody"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:context=".delivery_pickup.AddCargoFragment">

        <TextView
            android:id="@+id/txt_text_add_pickup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="32dp"
            android:layout_marginRight="16dp"
            android:fontFamily="@font/main_bold"
            android:text=" "
            android:textColor="@color/colorPrimary"
            android:textSize="18sp"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/txt_text_new_pickup_waybill"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="40dp"
            android:layout_marginRight="16dp"
            android:fontFamily="@font/main_medium"
            android:text=""
            android:textColor="@color/lightGray"
            android:textSize="14sp"
            android:visibility="gone"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/txt_text_add_pickup" />

        <EditText
            android:id="@+id/et_new_pickup_waybill"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="24dp"
            android:layout_marginRight="8dp"
            android:background="@android:color/transparent"
            android:fontFamily="@font/main_medium"
            android:gravity="right"
            android:inputType="number"
            android:paddingLeft="16dp"
            android:paddingTop="16dp"
            android:paddingRight="100dp"
            android:paddingBottom="16dp"
            android:textColor="@color/darkGray"
            android:textSize="14sp"
            android:visibility="gone"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/txt_text_add_pickup" />

        <View
            android:id="@+id/view_waybill"
            android:layout_width="match_parent"
            android:layout_height="@dimen/divider_height"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:background="@color/lighterGray"
            android:visibility="gone"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/et_new_pickup_waybill" />

        <TextView
            android:id="@+id/txt_text_new_pickup_closed_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:layout_marginRight="16dp"
            android:fontFamily="@font/main_medium"
            android:text=" "
            android:textColor="@color/lightGray"
            android:textSize="14sp"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/view_waybill" />

        <EditText
            android:id="@+id/et_new_pickup_closed_count"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="8dp"
            android:background="@android:color/transparent"
            android:fontFamily="@font/main_medium"
            android:gravity="right"
            android:inputType="number"
            android:paddingLeft="16dp"
            android:paddingTop="16dp"
            android:paddingRight="100dp"
            android:paddingBottom="16dp"
            android:text="@={viewModel.pickupClosedCount}"
            android:textColor="@color/darkGray"
            android:textSize="14sp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/view_waybill" />

        <View
            android:id="@+id/view_closed_count"
            android:layout_width="match_parent"
            android:layout_height="@dimen/divider_height"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:background="@color/lighterGray"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/et_new_pickup_closed_count" />

        <TextView
            android:id="@+id/txt_text_new_pickup_kind_service"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:layout_marginRight="16dp"
            android:fontFamily="@font/main_medium"
            android:text=" "
            android:textColor="@color/lightGray"
            android:textSize="14sp"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/view_closed_count" />

        <Spinner
            android:id="@+id/spinner_new_pickup_kind_service"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="14dp"
            android:layout_marginRight="100dp"
            android:paddingLeft="16dp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/view_closed_count" />

        <View
            android:id="@+id/view_kind_service"
            android:layout_width="match_parent"
            android:layout_height="@dimen/divider_height"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="16dp"
            android:layout_marginRight="20dp"
            android:background="@color/lighterGray"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/txt_text_new_pickup_kind_service" />

        <TextView
            android:id="@+id/txt_text_new_pickup_kind_rent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:layout_marginRight="16dp"
            android:fontFamily="@font/main_medium"
            android:text=""
            android:textColor="@color/lightGray"
            android:textSize="14sp"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/view_kind_service" />

        <!--<androidx.appcompat.widget.AppCompatSpinner
            android:id="@+id/spinner_new_pickup_kind_rent"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginRight="100dp"
            android:paddingLeft="16dp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/view_kind_service" />-->


        <RadioGroup
            android:id="@+id/spinner_new_pickup_kind_rent"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="10dp"
            android:layout_marginRight="100dp"
            android:gravity="center"
            android:orientation="horizontal"
            android:paddingLeft="16dp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/view_kind_service">

            <RadioButton
                android:id="@+id/radio1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="start"
                android:layout_marginRight="16dp"
                android:button="@null"
                android:checked="@={viewModel.radioPasPayment}"
                android:drawableRight="?android:attr/listChoiceIndicatorSingle"
                android:fontFamily="@font/main_light"
                android:layoutDirection="rtl"
                android:text=""
                android:textAlignment="textStart"
                android:textSize="12sp" />

            <RadioButton
                android:id="@+id/radio2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="start"
                android:button="@null"
                android:checked="@={viewModel.radioPishPayment}"
                android:drawableRight="?android:attr/listChoiceIndicatorSingle"
                android:fontFamily="@font/main_light"
                android:layoutDirection="rtl"
                android:text=""
                android:textAlignment="textStart"
                android:textSize="12sp" />
        </RadioGroup>

        <View
            android:id="@+id/view_kind_rent"
            android:layout_width="match_parent"
            android:layout_height="@dimen/divider_height"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="16dp"
            android:layout_marginRight="20dp"
            android:background="@color/lighterGray"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/txt_text_new_pickup_kind_rent" />

        <!--<TextView
            android:id="@+id/txt_text_new_service_percentage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:layout_marginRight="16dp"
            android:fontFamily="@font/main_medium"
            android:tag="check_for_visibility"
            android:text="Service percent"
            android:textColor="@color/lightGray"
            android:textSize="14sp"
            android:visibility="gone"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/view_kind_rent" />

        <EditText
            android:id="@+id/et_new_pickup_service_percentage"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="8dp"
            android:background="@android:color/transparent"
            android:fontFamily="@font/main_medium"
            android:gravity="right"
            android:inputType="number"
            android:paddingLeft="16dp"
            android:paddingTop="16dp"
            android:paddingRight="100dp"
            android:paddingBottom="16dp"
            android:tag="check_for_visibility"
            android:textColor="@color/darkGray"
            android:textSize="14sp"
            android:visibility="gone"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/view_kind_rent" />

        <View
            android:id="@+id/view_kind_service_percentage"
            android:layout_width="match_parent"
            android:layout_height="@dimen/divider_height"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="16dp"
            android:layout_marginRight="20dp"
            android:background="@color/lighterGray"
            android:tag="check_for_visibility"
            android:visibility="gone"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/txt_text_new_service_percentage" />-->

        <TextView
            android:id="@+id/txt_text_new_weight_of_goods"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:layout_marginRight="16dp"
            android:fontFamily="@font/main_medium"
            android:tag="check_for_visibility"
            android:text="weight"
            android:textColor="@color/lightGray"
            android:textSize="14sp"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/view_kind_rent" />

        <EditText
            android:id="@+id/et_new_pickup_weight_of_goods"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="8dp"
            android:background="@android:color/transparent"
            android:fontFamily="@font/main_medium"
            android:gravity="right"
            android:inputType="number"
            android:paddingLeft="16dp"
            android:paddingTop="16dp"
            android:paddingRight="100dp"
            android:paddingBottom="16dp"
            android:tag="check_for_visibility"
            android:text="@={viewModel.weightOfGoods}"
            android:textColor="@color/darkGray"
            android:textSize="14sp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/view_kind_rent" />

        <View
            android:id="@+id/view_weight_of_goods"
            android:layout_width="match_parent"
            android:layout_height="@dimen/divider_height"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="16dp"
            android:layout_marginRight="20dp"
            android:background="@color/lighterGray"
            android:tag="check_for_visibility"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/txt_text_new_weight_of_goods" />

        <TextView
            android:id="@+id/txt_text_new_value_of_goods"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:layout_marginRight="16dp"
            android:fontFamily="@font/main_medium"
            android:tag="check_for_visibility"
            android:text="Value"
            android:textColor="@color/lightGray"
            android:textSize="14sp"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/view_weight_of_goods" />

        <EditText
            android:id="@+id/et_new_pickup_value_of_goods"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="8dp"
            android:background="@android:color/transparent"
            android:fontFamily="@font/main_medium"
            android:gravity="right"
            android:inputType="number"
            android:paddingLeft="16dp"
            android:paddingTop="16dp"
            android:paddingRight="100dp"
            android:paddingBottom="16dp"
            android:tag="check_for_visibility"
            android:text="@={viewModel.valueOfGoods}"
            android:textColor="@color/darkGray"
            android:textSize="14sp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/view_weight_of_goods" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

另外两个片段类似于片段拾取发送器和片段拾取接收器,但具有不同的组件和ID。在我的fragment_拾取中,我将有一些按钮,其中包含下一步和上一步,用于更新步骤live data以切换XML布局。 请你指导我如何处理这件事好吗