【发布时间】:2019-05-20 04:02:08
【问题描述】:
我正在将导航库应用到我的项目中。
我得到这个错误:
android.view.InflateException: Binary XML file line #23: Binary XML file line #23: Error inflating class fragment
这是MainActivity.kt:
val fragmentManager = supportFragmentManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if(savedInstanceState == null){
fragmentManager.beginTransaction().add(R.id.nav_host_fragment, InitFragment()).commit()
}else{
}
}
这是activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000"
android:tint="#555"
tools:context="com.example.view.main.MainActivity">
<ImageView
android:id="@+id/iv_flame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" />
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph"/>
</RelativeLayout>
</layout>
这是InitFragment.kt
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
var binding = DataBindingUtil.inflate<FragmentInitBinding>(inflater, R.layout.fragment_init, container, false)
binding!!.initVm = InitViewModel(this@InitFragment)
var view = binding.root
return view
}
这是fragment_init.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:bind="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="initVm"
type="com.example.vm.InitViewModel" />
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/transparent"
tools:context=".view.main.fragment.LoginFragment">
</layout>
我认为这段代码没有任何问题。我需要为此执行任何额外的工作吗?我正在使用数据绑定。但我认为MainActivity.kt 不需要。
MainActivity.kt 包含所有片段。而initFragment.kt 将是第一个具有导航菜单的导航。
我该怎么办?
【问题讨论】:
-
我认为问题是——fragmentManager.beginTransaction().add(R.id.nav_host_fragment, InitFragment()).commit()——这一行。请删除此行并尝试。
-
@DeepakRajput 我评论了那部分,但发生了同样的错误。
-
你到底想做什么??您只想使用导航权将片段放入活动中?
-
@DeepakRajput 是的..
-
我在下面发布了一个演示。请检查一下。
标签: android android-fragments android-inflate android-navigation