求助:使用FragmentResultListener时出现「无法找到符号」编译错误
看起来你踩了AndroidX Fragment版本兼容的坑!FragmentResultListener这个API是AndroidX Fragment库1.3.0及以上版本才正式引入的,而你的开发环境要么没使用AndroidX,要么Fragment依赖版本太低,导致编译器找不到这个类。下面是具体的解决步骤:
1. 确认项目启用AndroidX
首先检查项目根目录下的gradle.properties文件,确保包含以下两行配置(如果没有就添加进去):
android.useAndroidX=true android.enableJetifier=true
这两行是让项目完全切换到AndroidX生态的关键,Jetifier会自动把旧的Support库依赖转换为AndroidX版本。
2. 升级Fragment依赖版本
打开app模块的build.gradle(或build.gradle.kts)文件,找到Fragment相关的依赖,将版本升级到1.3.0或更高(推荐用最新稳定版):
// Java项目示例 implementation 'androidx.fragment:fragment:1.3.0' // 注意:旧的android.support.v4.app.ListFragment已经被弃用,必须使用AndroidX版本
修改完成后,点击Android Studio右上角的「Sync Project with Gradle Files」按钮同步项目,让Gradle下载更新后的依赖。
3. 替换旧的Fragment导入
检查你的FirstFragment代码中的导入语句,把旧的Support库导入替换为AndroidX版本:
// 替换前(旧Support库) // import android.support.v4.app.ListFragment; // 替换后(AndroidX) import androidx.fragment.app.ListFragment; import androidx.fragment.app.FragmentResultListener;
确保所有Fragment相关的类都来自androidx.fragment.app包,而不是旧的android.support.v4.app包。
4. 修正代码中的潜在问题
你的代码里提前声明了一个空的FragmentResultListener实例,这是多余的,可以删掉。修正后的代码示例:
import androidx.fragment.app.ListFragment; import androidx.fragment.app.FragmentResultListener; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; public class FirstFragment extends ListFragment { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); getParentFragmentManager().setFragmentResultListener("key", this, new FragmentResultListener() { @Override public void onFragmentResult(@NonNull String key, @NonNull Bundle bundle) { String result = bundle.getString("bundleKey"); // 在这里处理从第二个Fragment传递过来的结果 } }); } @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) { return inflater.inflate(R.layout.fragment_first, container, false); } }
额外说明
你提到使用的是2020年5月的Android 4.0版本,这里应该是指Android Studio 4.0?Android Studio 4.0本身是支持AndroidX的,但默认可能不会自动配置最新的Fragment依赖,所以手动升级依赖是关键。另外,FragmentResultListener的最低支持SDK版本是API 14(也就是Android 4.0),所以你的目标设备版本是符合要求的,不用担心兼容性问题。
内容的提问来源于stack exchange,提问作者Fred

