如何在FlutterFragmentActivity中使用DataBinding及解决未解析引用错误
在FlutterFragmentActivity中正确使用DataBinding解决“Unresolved reference”错误
1. 确保已启用DataBinding
首先在模块级build.gradle(通常是app/build.gradle)的android代码块中开启DataBinding支持,然后同步项目:
android { // 其他配置... buildFeatures { dataBinding true viewBinding true // 可选,若需同时使用ViewBinding } }
2. 检查布局文件结构
ActivityMainBinding是根据布局文件自动生成的,要求布局必须以<layout>为根标签。例如res/layout/activity_main.xml的结构需如下:
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 替换为你实际的布局容器,如ConstraintLayout --> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 嵌入Flutter内容的View --> <io.flutter.embedding.android.FlutterView android:id="@+id/flutter_view" android:layout_width="match_parent" android:layout_height="match_parent"/> <!-- 其他原生控件 --> </androidx.constraintlayout.widget.ConstraintLayout> </layout>
注意:布局文件名activity_main.xml对应生成的Binding类为ActivityMainBinding,大小写严格对应。
3. 修正Activity代码
FlutterFragmentActivity默认会加载Flutter内容,若要混合原生布局与Flutter,需手动关联FlutterEngine和布局中的FlutterView,修正后的代码如下:
package com.loyalty import io.flutter.embedding.android.FlutterFragmentActivity import android.os.Bundle import com.loyalty.ActivityMainBinding import io.flutter.embedding.engine.FlutterEngine import io.flutter.embedding.engine.dart.DartExecutor class MainActivity : FlutterFragmentActivity() { private lateinit var binding: ActivityMainBinding private lateinit var flutterEngine: FlutterEngine override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 初始化DataBinding binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) // 初始化FlutterEngine并执行默认入口 flutterEngine = FlutterEngine(this) flutterEngine.dartExecutor.executeDartEntrypoint( DartExecutor.DartEntrypoint.createDefault() ) // 将FlutterView与FlutterEngine绑定 binding.flutterView.attachToFlutterEngine(flutterEngine) } override fun onDestroy() { super.onDestroy() // 销毁FlutterEngine释放资源 flutterEngine.destroy() } }
4. 清理重建项目
若仍报错,执行Build -> Clean Project,再执行Build -> Rebuild Project,清除编译缓存后重新生成Binding类。
5. 检查包名导入
确保ActivityMainBinding的导入包名与应用包名一致(示例中为com.loyalty),避免因包名错误导致引用失败。
内容的提问来源于stack exchange,提问作者Phạm Trường
相关产品推荐
相关产品推荐

