Fragment中使用ViewBinding时DemoFragmentBinding无法识别求助
解决ViewBinding中DemoFragmentBinding无法识别的问题
我实现了如下Fragment代码:
import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.jiangdg.ausbc.base.CameraFragment import com.jiangdg.ausbc.widget.AspectRatioTextureView import com.jiangdg.ausbc.widget.IAspectRatio class DemoFragment : CameraFragment() { private lateinit var mViewBinding: DemoFragmentBinding override fun initView() { super.initView() } override fun getCameraView(): IAspectRatio { return AspectRatioTextureView(requireContext()) } override fun initData() { super.initData() } override fun getCameraViewContainer(): ViewGroup { return mViewBinding.cameraViewContainer } override fun getRootView(inflater: LayoutInflater, container: ViewGroup?): View { mViewBinding = DemoFragmentBinding.inflate(inflater, container, false) return mViewBinding.root } override fun getGravity(): Int = Gravity.TOP }
但Android Studio报错:
Unresolved reference: DemoFragmentBinding
已在App模块的gradle中配置:
android { buildFeatures { dataBinding true viewBinding = true } }
尝试过调整XML布局但无效,以下是可行的排查和解决方向:
核对XML文件名与Binding类名的匹配关系
ViewBinding生成的类名是XML文件名的驼峰转换结果:比如XML文件名为demo_fragment.xml,生成的类是DemoFragmentBinding;如果文件名是fragment_demo.xml,类名则为FragmentDemoBinding。同时XML文件名必须是小写字母+下划线格式,不能包含大写字母,否则无法正常生成Binding类。确保XML布局满足ViewBinding要求
- 若使用ViewBinding(非DataBinding),布局根标签不需要
<layout>包裹,但必须是有效的View/ViewGroup,且需包含代码中用到的cameraViewContainer控件(id必须完全匹配)。示例XML:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <FrameLayout android:id="@+id/cameraViewContainer" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>- 若混用DataBinding,根标签必须用
<layout>包裹,否则DataBinding不会生成对应类。
- 若使用ViewBinding(非DataBinding),布局根标签不需要
清理缓存并重新构建项目
AS缓存可能导致Binding类未及时生成,执行以下操作:- 点击
Build→Clean Project - 再点击
Build→Rebuild Project - 若无效,点击
File→Invalidate Caches...,选择Invalidate and Restart
- 点击
确认gradle配置生效
确保配置写在app模块的build.gradle/build.gradle.kts中,且点击Sync Now完成同步。如果不需要DataBinding,可以只开启viewBinding = true,避免不必要的混淆。检查Android Studio版本
ViewBinding要求AS 3.6及以上版本,若版本过低,建议升级到最新稳定版。
内容的提问来源于stack exchange,提问作者Clamore
相关产品推荐
相关产品推荐

