我收到 Caused by: android.view.InflateException: Binary XML file line #32: Error inflateing class androidx.fragment.app.FragmentContainerView

Ozg*_*ewn 3 navigation android fragment android-fragments kotlin

所以我试图让我的片段与导航组件一起工作,但由于某种原因我遇到了这个异常。我已经搜索了一些解决方案,但没有找到我的解决方案。不要介意一些西班牙变量。\n我收到异常:

\n
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.iesnervion.pmdmo_prac2eva/com.iesnervion.pmdmo_prac2eva.view.MainActivity}: android.view.InflateException: Binary XML file line #32: Binary XML file line #32: Error inflating class androidx.fragment.app.FragmentContainerView\n
Run Code Online (Sandbox Code Playgroud)\n

它说其原因是:

\n
Caused by: android.view.InflateException: Binary XML file line #32: Binary XML file line #32: Error inflating class androidx.fragment.app.FragmentContainerView\n
Run Code Online (Sandbox Code Playgroud)\n

我的片段:

\n
class TiendaFragment : Fragment(), SearchView.OnQueryTextListener {\n// TODO: Rename and change types of parameters\nprivate var param1: String? = null\nprivate var param2: String? = null\nprivate lateinit var adapter: ProductoAdapter\nprivate var listaProductos = mutableListOf<ProductoEntidad>()\nprivate var _binding: FragmentTiendaBinding? = null\nprivate val binding get() = _binding!!\nprivate val productoViewModel: ProductoViewModel by activityViewModels()\nprivate lateinit var navController: NavController\n\noverride fun onCreate(savedInstanceState: Bundle?) {\n    super.onCreate(savedInstanceState)\n    arguments?.let {\n        param1 = it.getString(ARG_PARAM1)\n        param2 = it.getString(ARG_PARAM2)\n    }\n\n    val database = Room.databaseBuilder(requireContext(), ProductoDatabase::class.java, "tienda-db").fallbackToDestructiveMigration().build()\n\n    val productos = ProductoService().getAllProductos()\n    lifecycleScope.launch {\n        productos.forEach { database.getDao().insertProductos(it) }\n    }\n\n    binding.svProductos.setOnQueryTextListener(this)\n}\n\noverride fun onCreateView(\n    inflater: LayoutInflater, container: ViewGroup?,\n    savedInstanceState: Bundle?\n): View? {\n    _binding = FragmentTiendaBinding.inflate(inflater, container, false)\n    return binding.root\n}\n\noverride fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n    super.onViewCreated(view, savedInstanceState)\n    navController = findNavController()\n    inicializarRecyclerView()\n}\n\nfun inicializarRecyclerView(){\n    adapter = ProductoAdapter(listaProductos){ onProductoSeleccionado(it) }\n    binding.rvProductos.layoutManager = LinearLayoutManager(requireContext())\n    binding.rvProductos.adapter = adapter\n\n    productoViewModel.getAllProductos()\n    val productos = productoViewModel.productoModel\n    listaProductos.removeAll(listaProductos)\n    listaProductos.addAll(productos)\n    adapter.notifyDataSetChanged()\n}\n\nprivate fun onProductoSeleccionado(producto: ProductoEntidad){\n    productoViewModel.productoSeleccionado.postValue(producto)\n    navController.navigate(R.id.action_tiendaFragment_to_detallesFragment)\n}\n\nprivate fun searchByName(query: String){\n    CoroutineScope(Dispatchers.IO).launch {\n        val listaProductosLlamada = ProductoService().getAllProductos()\n        if(!listaProductosLlamada.isNullOrEmpty()){\n            listaProductos.clear()\n            listaProductos.addAll(listaProductosLlamada)\n            adapter.notifyDataSetChanged()\n        }else{\n            showError()\n        }\n        hideKeyboard()\n    }\n}\n\n/**\n * Oculta el teclado, sin mas, no hay que profundizar mucho en esto\n */\nprivate fun hideKeyboard(){\n    val imm = requireActivity().getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager\n    imm.hideSoftInputFromWindow(binding.root.windowToken, 0)\n}\n\nprivate fun showError(){\n    Toast.makeText(requireContext(), "Ha ocurrido un error", Toast.LENGTH_SHORT).show()\n}\n\noverride fun onQueryTextSubmit(query: String?): Boolean {\n    if(!query.isNullOrEmpty()){ //no uso el query?.let ya que eso solo funciona con nulos, pero no cuando esta vacio\n        searchByName(query.lowercase())\n    }\n    return true\n}\n\noverride fun onQueryTextChange(newText: String?): Boolean {\n    return true //ya que no queremos que pase nada con cada cambio en el texto, solo queremos que se cambie cuando se busque\n}\n\ncompanion object {\n    /**\n     * Use this factory method to create a new instance of\n     * this fragment using the provided parameters.\n     *\n     * @param param1 Parameter 1.\n     * @param param2 Parameter 2.\n     * @return A new instance of fragment TiendaFragment.\n     */\n    // TODO: Rename and change types and number of parameters\n    @JvmStatic\n    fun newInstance(param1: String, param2: String) =\n        TiendaFragment().apply {\n            arguments = Bundle().apply {\n                putString(ARG_PARAM1, param1)\n                putString(ARG_PARAM2, param2)\n            }\n        }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我的片段 XML:

\n
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"\nxmlns:tools="http://schemas.android.com/tools"\nandroid:layout_width="match_parent"\nandroid:layout_height="match_parent"\nxmlns:app="http://schemas.android.com/apk/res-auto"\ntools:context=".fragments.TiendaFragment">\n\n<androidx.constraintlayout.widget.ConstraintLayout\n    android:layout_width="match_parent"\n    android:layout_height="match_parent">\n\n    <androidx.appcompat.widget.SearchView\n        android:id="@+id/svProductos"\n        android:layout_width="250dp"\n        android:layout_height="0dp"\n        app:layout_constraintTop_toTopOf="parent"\n        app:layout_constraintLeft_toLeftOf="parent"\n        app:layout_constraintRight_toRightOf="parent" />\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id="@+id/rvProductos"\n        android:layout_width="wrap_content"\n        android:layout_height="wrap_content"\n        app:layout_constraintTop_toTopOf="parent"\n        app:layout_constraintLeft_toLeftOf="parent"\n        app:layout_constraintRight_toRightOf="parent"\n        app:layout_constraintBottom_toTopOf="@+id/precioTotalValue" />\n\n    <TextView\n        android:layout_width="wrap_content"\n        android:layout_height="wrap_content"\n        android:id="@+id/txtPrecioTotal"\n        app:layout_constraintLeft_toLeftOf="parent"\n        app:layout_constraintBottom_toBottomOf="parent"\n        android:text="Precio:"\n        android:layout_marginLeft="12dp"\n        android:layout_marginBottom="25dp"\n        android:textSize="25sp" />\n\n    <TextView\n        android:layout_width="wrap_content"\n        android:layout_height="wrap_content"\n        android:id="@id/precioTotalValue"\n        app:layout_constraintBottom_toBottomOf="parent"\n        app:layout_constraintLeft_toRightOf="@id/txtPrecioTotal"\n        android:layout_marginLeft="12dp"\n        tools:text="25\xe2\x82\xac"\n        android:layout_marginBottom="25dp"\n        android:textSize="25sp" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>\n
Run Code Online (Sandbox Code Playgroud)\n\n\n

这是 Activity_main.xml (我在其中收到错误):

\n
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\nxmlns:app="http://schemas.android.com/apk/res-auto"\nxmlns:tools="http://schemas.android.com/tools"\nandroid:layout_width="match_parent"\nandroid:layout_height="match_parent"\ntools:context=".view.MainActivity">\n\n<TextView\n    android:layout_width="wrap_content"\n    android:layout_height="wrap_content"\n    android:id="@+id/titulo"\n    app:layout_constraintTop_toTopOf="parent"\n    app:layout_constraintLeft_toLeftOf="parent"\n    app:layout_constraintRight_toRightOf="parent"\n    android:text="@string/shop_name"\n    android:layout_marginTop="15dp"\n    android:textSize="25sp" />\n\n<androidx.fragment.app.FragmentContainerView\n    android:layout_width="wrap_content"\n    android:layout_height="wrap_content"\n    android:id="@+id/nav_host_fragment_container"\n    android:name="androidx.navigation.fragment.NavHostFragment"\n    app:layout_constraintTop_toBottomOf="@id/titulo"\n    app:layout_constraintLeft_toLeftOf="parent"\n    app:layout_constraintRight_toRightOf="parent"\n    app:layout_constraintBottom_toBottomOf="parent"\n\n    app:defaultNavHost="true"\n    app:navGraph="@navigation/nav_graph"\n    />\n
Run Code Online (Sandbox Code Playgroud)\n

我不知道你是否需要这个,但这是我的 nav_graph.xml

\n
<navigation xmlns:android="http://schemas.android.com/apk/res/android"\nxmlns:app="http://schemas.android.com/apk/res-auto"\nxmlns:tools="http://schemas.android.com/tools"\nandroid:id="@+id/nav_graph"\napp:startDestination="@id/tiendaFragment">\n<fragment\n    android:id="@+id/tiendaFragment"\n    android:name="com.iesnervion.pmdmo_prac2eva.fragments.TiendaFragment"\n    android:label="fragment_tienda"\n    tools:layout="@layout/fragment_tienda" >\n    <action\n        android:id="@+id/action_tiendaFragment_to_detallesFragment"\n        app:destination="@id/detallesFragment" />\n</fragment>\n<fragment\n    android:id="@+id/detallesFragment"\n    android:name="com.iesnervion.pmdmo_prac2eva.fragments.DetallesFragment"\n    android:label="fragment_detalles"\n    tools:layout="@layout/fragment_detalles" />\n
Run Code Online (Sandbox Code Playgroud)\n\n

感谢您尝试提供帮助,如果您需要其他文件才能找到修复程序,只需评论即可

\n

编辑:

\n

这是完整的堆栈跟踪:

\n
E/AndroidRuntime: FATAL EXCEPTION: main\nProcess: com.iesnervion.pmdmo_prac2eva, PID: 13690\njava.lang.RuntimeException: Unable to start activity ComponentInfo{com.iesnervion.pmdmo_prac2eva/com.iesnervion.pmdmo_prac2eva.view.MainActivity}: android.view.InflateException: Binary XML file line #32: Binary XML file line #32: Error inflating class androidx.fragment.app.FragmentContainerView\n    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)\n    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)\n    at android.app.ActivityThread.-wrap11(Unknown Source:0)\n    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)\n    at android.os.Handler.dispatchMessage(Handler.java:105)\n    at android.os.Looper.loop(Looper.java:164)\n    at android.app.ActivityThread.main(ActivityThread.java:6541)\n    at java.lang.reflect.Method.invoke(Native Method)\n    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)\n    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)\n Caused by: android.view.InflateException: Binary XML file line #32: Binary XML file line #32: Error inflating class androidx.fragment.app.FragmentContainerView\n Caused by: android.view.InflateException: Binary XML file line #32: Error inflating class androidx.fragment.app.FragmentContainerView\n Caused by: java.lang.NullPointerException\n    at com.iesnervion.pmdmo_prac2eva.fragments.TiendaFragment.getBinding(TiendaFragment.kt:47)\n    at com.iesnervion.pmdmo_prac2eva.fragments.TiendaFragment.onCreate(TiendaFragment.kt:65)\n    at androidx.fragment.app.Fragment.performCreate(Fragment.java:2981)\n    at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:474)\n    at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:257)\n    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1840)\n    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1764)\n    at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1701)\n    at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2849)\n    at androidx.fragment.app.FragmentManager.dispatchCreate(FragmentManager.java:2773)\n    at androidx.fragment.app.Fragment.onCreate(Fragment.java:1913)\n    at androidx.navigation.fragment.NavHostFragment.onCreate(NavHostFragment.java:264)\n    at androidx.fragment.app.Fragment.performCreate(Fragment.java:2981)\n    at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:474)\n    at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:257)\n    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1840)\n    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1764)\n    at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1670)\n    at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:323)\n    at androidx.fragment.app.FragmentContainerView.<init>(FragmentContainerView.kt:158)\n    at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:53)\n    at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:135)\n    at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:295)\n    at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:274)\n    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:780)\n    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)\n    at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)\n    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)\n    at android.view.LayoutInflater.inflate(LayoutInflater.java:515)\n    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)\n    at android.view.LayoutInflater.inflate(LayoutInflater.java:374)\n\nE/AndroidRuntime:     at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:706)\n    at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:195)\n    at com.iesnervion.pmdmo_prac2eva.view.MainActivity.onCreate(MainActivity.kt:16)\n    at android.app.Activity.performCreate(Activity.java:6975)\n    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)\n    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)\n    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)\n    at android.app.ActivityThread.-wrap11(Unknown Source:0)\n    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)\n    at android.os.Handler.dispatchMessage(Handler.java:105)\n    at android.os.Looper.loop(Looper.java:164)\n    at android.app.ActivityThread.main(ActivityThread.java:6541)\n    at java.lang.reflect.Method.invoke(Native Method)\n    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)\n    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)\n
Run Code Online (Sandbox Code Playgroud)\n

编辑2:\n我的活动中有2个片段,在这里您可以看到设计视图:\n导航图设计视图

\n

这是我的 MainActivity 代码:

\n
class MainActivity : AppCompatActivity() {\noverride fun onCreate(savedInstanceState: Bundle?) {\n    super.onCreate(savedInstanceState)\n    setContentView(R.layout.activity_main)\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

}

\n

laa*_*lto 6

onCreate()现在访问还为时过早binding,您只是在稍后进行设置onCreateView()

例如,您可以将 移动binding.svProductos.setOnQueryTextListener(this)onViewCreated()