Android Studio无法解析符号ActionFirstFragmentToSecondFragment求助
Android Studio无法解析Safe Args生成的Action类问题
我是Android开发初学者,使用Android Studio Flamingo与JDK20。已在项目和模块的build.gradle中配置Safe Args并同步Gradle,且在SecondFragment对应的导航图中添加了参数,但编写跳转代码时,Android Studio提示无法解析符号ActionFirstFragmentToSecondFragment。该按钮预期功能是将TextView中的数值传递到SecondFragment页面。
错误代码位置
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); view.findViewById(R.id.random_button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int currentCount = Integer.parseInt(showCountTextView.getText().toString()); FirstFragmentDirections.ActionFirstFragmentToSecondFragment action = FirstFragmentDirections.actionFirstFragmentToSecondFragment(currentCount); NavHostFragment.findNavController(FirstFragment.this).navigate(action); } }); }
项目级build.gradle文件
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { dependencies { def nav_version = "2.6.0-rc02" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } } plugins { id 'com.android.application' version '8.0.2' apply false id 'com.android.library' version '8.0.2' apply false }
模块级build.gradle文件
plugins { id 'com.android.application' } apply plugin: 'androidx.navigation.safeargs' android { namespace 'com.example.myproject' compileSdk 34 defaultConfig { applicationId "com.example.myproject" minSdk 33 targetSdk 34 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } buildFeatures { viewBinding true } } dependencies { constraints{ implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0") { because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib") } implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0") { because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib") } } implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.9.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.navigation:navigation-fragment:2.6.0' implementation 'androidx.navigation:navigation-ui:2.6.0' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' }
已尝试的无效操作
- 修改Gradle版本、target SDK版本
- 调整
apply plugin: 'androidx.navigation.safeargs'的位置并重新构建 - 查阅相关问题帖子但未解决
可行解决步骤
1. 确认导航图配置正确性
打开res/navigation/nav_graph.xml:
- 检查FirstFragment到SecondFragment的action是否存在,且已添加匹配类型的参数(比如和
currentCount对应的int类型) - 确保action的
id为action_firstFragment_to_secondFragment(Safe Args生成的类名基于该id的驼峰命名规则)
2. 统一Navigation组件版本
项目级build.gradle中使用的nav_version是2.6.0-rc02,但模块依赖的navigation-fragment/navigation-ui是2.6.0,版本不一致会导致生成类无法被识别。将项目级的nav_version改为2.6.0,同步Gradle后重新构建。
3. 强制重新生成Safe Args代码
- 点击Android Studio右侧Gradle面板,找到目标模块 -> Tasks -> other -> 运行
generateSafeArgsDebug(release环境则选generateSafeArgsRelease) - 或者执行
Build -> Clean Project,再执行Build -> Rebuild Project,强制重新生成所有自动生成类
4. 调整插件应用方式(适配AGP 8.0+)
对于Android Studio Flamingo对应的AGP 8.0+版本,推荐使用plugins DSL方式替代旧的apply plugin写法:
将模块级build.gradle中的插件配置修改为:
plugins { id 'com.android.application' id 'androidx.navigation.safeargs' }
同步Gradle后重新构建项目
5. 降低JDK版本兼容
JDK20与Safe Args可能存在兼容问题,尝试将JDK版本切换为JDK17或JDK8,再重新构建项目
内容的提问来源于stack exchange,提问作者R.Tech
相关产品推荐
相关产品推荐

