You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 07:57:44