我试图在fragment的onCreateView方法中显示一个小吃店,但我不知道该在小吃店内部传递什么视图。我很困惑,因为我第一次使用Navigation组件和视图绑定,可能有问题。我尝试绑定.root,但我得到了以下异常:
异常错误:在给定视图中未找到合适的父级。请提供有效的视图。
之后,我尝试将requireView().rootView作为参数,但也出现了以下异常:
java.lang.IllegalStateException:片段XFragment{7a 091 b5}(cefa 1aef-59 c3 -4602-bcf 1-b36 f7 d538 cf 9)id= 0x 7 f0800 f7}未从onCreateView()返回视图,或者在onCreateView()之前调用了此视图
我在XFragment中的代码:
package com.sdsd.sds
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.Navigation
import com.google.android.material.snackbar.Snackbar
import com.sdsd.sds.databinding.FragmentXBinding
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"
class XFragment : Fragment() {
private var _binding: FragmenXBinding? = null
private val binding get() = _binding!!
private var param1: String? = null
private var param2: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
param1 = it.getString(ARG_PARAM1)
param2 = it.getString(ARG_PARAM2)
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentXBinding.inflate(inflater, container, false)
binding.tvFgRegistration.setOnClickListener {
Navigation.findNavController(binding.root)
.navigate(R.id.action_f1_to_f2)
}
val snackbar: Snackbar = Snackbar.make(binding.root, "Succesful", Snackbar.LENGTH_LONG)
snackbar.show()
return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
companion object {
@JvmStatic
fun newInstance(param1: String, param2: String) =
XFragment().apply {
arguments = Bundle().apply {
putString(ARG_PARAM1, param1)
putString(ARG_PARAM2, param2)
}
}
}
}
XML LAYOUT FILE:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:background="@drawable/ic"
tools:context=".XFragment">
<EditText
android:id="@+id/etE"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="16dp"
android:background="@color/translucent"
android:drawableStart="@drawable/ic_vector"
android:drawablePadding="5dp"
android:ems="10"
android:hint="@string/e_mail"
android:inputType="text"
android:textSize="25sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView" />
<EditText
android:id="@+id/etP"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="16dp"
android:background="@color/translucent"
android:drawableStart="@drawable/ic_vector"
android:drawablePadding="5dp"
android:ems="10"
android:hint="@string/password"
android:inputType="textPassword"
android:textSize="25sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/etE" />
<TextView
android:id="@+id/tvFgRegistration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="180dp"
android:layout_marginEnd="76dp"
android:layout_marginBottom="100dp"
android:text="@string/new_u"
android:textColor="@color/white"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
我只想在XFragment创建时显示一个带有消息的小吃店。
有人能告诉我如何解决这个问题并用几句话解释为什么吗
3条答案
按热度按时间ymdaylpp1#
我找到了几种方法来显示一个小吃店
解决方法之一是使用requireView()。
当您在任何onClickListner{}中时,只要将它作为一个视图传递,它就可以完成这项工作。
ni65a41a2#
我找到了一个简单的解决方案,看起来Snackbar工作得很好***,只有将CoordinatorLayout作为根布局***,所以我在XML文件中将CoordinatorLayout设置为根布局。
在Snackbar中,我只是放置了binding.coordinatorlayout,其中coordinatorlayout只是XML文件中的一个ID。
片段的代码解决方案如下:
XML布局文件:
slmsl1lt3#
我在使用导航体系结构时也遇到了同样的问题。
对我有用的是