我在 ScrollView 中有 3 个 ViewStub,并且没有显示任何内容。
这是片段 XML:
<?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.smellydogcoding.westvirginiaelectronicfieldguide.ui.FirebaseViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/user_profile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:fontFamily="@font/roboto_bold"
android:text="@{`User Profile for ` + viewModel.firstname + ` ` + viewModel.lastname}"
android:textColor="@color/accordionTitleBorder"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="User Profile for {firstname}" />
<ScrollView
android:id="@+id/profileScrollView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:fillViewport="true"
android:paddingBottom="48dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/user_profile">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ViewStub
android:id="@+id/stub_basic_info_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"
app:viewModel="@{viewModel}" />
<ViewStub
android:id="@+id/stub_account_info_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"
app:viewModel="@{viewModel}" />
<ViewStub
android:id="@+id/stub_access_level_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"
app:viewModel="@{viewModel}" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
这是 ViewStub 之一(其他 2 个的结构相同):
<?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.smellydogcoding.westvirginiaelectronicfieldguide.ui.FirebaseViewModel" />
</data>
<com.google.android.material.card.MaterialCardView
android:id="@+id/account_info_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
app:cardCornerRadius="10dp"
app:cardElevation="5dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/account_info_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/secondaryColor"
android:fontFamily="@font/roboto_bold"
android:paddingHorizontal="16dp"
android:paddingVertical="16dp"
android:text="@string/account_info"
android:textAppearance="?attr/textAppearanceHeadline6"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/username_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:text="@string/username_alt"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/account_info_title" />
<TextView
android:id="@+id/username_value"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:text="@{viewModel.email}"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/guideline2"
app:layout_constraintTop_toBottomOf="@id/account_info_title"
tools:text="Email" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="156dp"
android:orientation="vertical"
app:layout_constraintGuide_begin="156dp"
app:layout_constraintStart_toStartOf="parent" />
<com.google.android.material.button.MaterialButton
android:id="@+id/change_username_button"
style="?attr/borderlessButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:text="@string/change_username"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/username_label" />
<com.google.android.material.button.MaterialButton
android:id="@+id/change_password_button"
style="?attr/borderlessButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:text="@string/change_password"
app:layout_constraintStart_toEndOf="@id/change_username_button"
app:layout_constraintTop_toBottomOf="@id/username_label" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
</layout>
这是片段:
package com.smellydogcoding.westvirginiaelectronicfieldguide.ui.profile
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.ViewStubProxy
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.smellydogcoding.westvirginiaelectronicfieldguide.R
import com.smellydogcoding.westvirginiaelectronicfieldguide.databinding.FragmentProfileBinding
import com.smellydogcoding.westvirginiaelectronicfieldguide.ui.FirebaseViewModel
class ProfileFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val binding = FragmentProfileBinding.inflate(layoutInflater)
val firebaseViewModel : FirebaseViewModel = ViewModelProvider(requireActivity())[FirebaseViewModel::class.java]
binding.viewModel = firebaseViewModel
binding.lifecycleOwner = viewLifecycleOwner
val basicInfoViewStubProxy : ViewStubProxy = binding.stubBasicInfoCard
val accountInfoViewStubProxy : ViewStubProxy = binding.stubAccountInfoCard
val accessLevelViewStubProxy : ViewStubProxy = binding.stubAccessLevelCard
basicInfoViewStubProxy.viewStub?.layoutResource = R.layout.basic_info_card
accountInfoViewStubProxy.viewStub?.layoutResource = R.layout.account_info_card
accessLevelViewStubProxy.viewStub?.layoutResource = R.layout.access_level_card
basicInfoViewStubProxy.viewStub?.inflate()
accountInfoViewStubProxy.viewStub?.inflate()
accessLevelViewStubProxy.viewStub?.inflate()
return binding.root
}
}
有谁知道为什么没有一个 ViewStub 没有显示在 ScrollView 中?最糟糕的部分是我有另一个带有 ScrollView 的片段,我以完全相同的方式编码并且它可以工作。
编辑 2022 年 2 月 7 日下午 4:10(美国东部时间)
如果我删除MaterialCardView
组件并将其作为 aInclude
而不是 a导入,ViewStub
则它可以工作。有谁知道为什么ScrollView
不喜欢MaterialCardView
?我真的宁愿不必重新设计视图。