NavHostFragment.findNavController无法应用于SettingsFragment报错如何解决
问题根源
你遇到的类型转换报错90%以上是Fragment导包不匹配导致的:NavHostFragment.findNavController()要求传入的是androidx.fragment.app.Fragment类型,若你的SettingsFragment错误导入了系统原生的android.app.Fragment包,就会触发类型不匹配报错。
修复步骤
1. 修正Fragment导入包
检查SettingsFragment顶部的import语句,删除错误的导包,替换为AndroidX的Fragment包:
// 删掉错误的导入 // import android.app.Fragment; // 替换为正确的AndroidX Fragment导入 import androidx.fragment.app.Fragment;
你可以对比之前正常运行的ActionFragment的Fragment导包,保持两者一致即可。
2. 更稳妥的NavController获取方式(可选,推荐)
不需要传入Fragment实例,直接用点击事件的View获取导航控制器,避免类型兼容问题:
修改onClick内的代码为:
@Override public void onClick(View view) { Navigation.findNavController(view) .navigate(R.id.action_SettingsFragment_to_LauncherFragment); }
注意需要提前导入Navigation类:import androidx.navigation.Navigation;
3. 额外校验项
如果修改后仍有问题,检查以下配置:
- 导航图
nav_graph.xml中已正确定义SettingsFragment到LauncherFragment的跳转action,id为action_SettingsFragment_to_LauncherFragment - 项目
build.gradle中Navigation相关依赖版本统一,均为AndroidX版本,没有混用旧support库依赖
修改后完整的SettingsFragment核心代码示例
import androidx.fragment.app.Fragment; import androidx.navigation.Navigation; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import com.yourpackage.databinding.FragmentSettingsBinding; // 替换为你自己的包名 public class SettingsFragment extends Fragment { private FragmentSettingsBinding binding; @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) { binding = FragmentSettingsBinding.inflate(inflater, container, false); return binding.getRoot(); } public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); binding.goBackButtonSettings.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Navigation.findNavController(view) .navigate(R.id.action_SettingsFragment_to_LauncherFragment); } }); } @Override public void onDestroyView() { super.onDestroyView(); binding = null; } }
内容的提问来源于stack exchange,提问作者BMG
相关产品推荐
相关产品推荐

