java - 找不到 .findNavController() 的正确上下文
问题描述
所以,我正在开发一个 Android 应用程序等。我有一个带有底部导航视图的 Main2Activity,它可以帮助我在 ProfileFragment 和 HomeFragment 之间切换。问题是我想在我的 ProfileFragment 中使用另一个 navView,我模拟了某种 TabView,所以我可以在 ProfileFragment 中看到两个不同的片段。
所以,这是我的 Main2Activity
public class Main2Activity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
BottomNavigationView navView = findViewById(R.id.nav_view);
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
R.id.navigation_home, R.id.navigation_settings, R.id.navigation_new_post,
R.id.navigation_notifications, R.id.navigation_profile)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController);
}
public BottomNavigationView getBottomNavigationView(){
return findViewById(R.id.nav_view);
}
public Activity getActivity(){
return this;
}
}
这是我的 ProfileFragment,这就是问题所在。我找不到在 findNavController() 和 setupWithNavController() 中使用的上下文:
public class ProfileFragment extends Fragment {
private ProfileViewModel notificationsViewModel;
private boolean isLoading = false;
public ProfileFragment() {
}
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
notificationsViewModel = ViewModelProviders.of(this).get(ProfileViewModel.class);
View root = inflater.inflate(R.layout.fragment_profile, container, false);
BottomNavigationView navView = root.findViewById(R.id.profile_nav_view);
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_my_posts, R.id.nav_applied_to)
.build();
NavController navController = Navigation.findNavController(getActivity(), R.id.profile_nav_host_fragment);
NavigationUI.setupActionBarWithNavController(new Main2Activity(), navController, appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController);
return root;
}
}
我不断收到的错误:java.lang.IllegalArgumentException:ID 没有引用此活动中的视图
任何人?
更新:这是堆栈跟踪
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.heirup, PID: 17523
java.lang.IllegalArgumentException: ID does not reference a View inside this Activity
at android.app.Activity.requireViewById(Activity.java:2772)
at androidx.core.app.ActivityCompat.requireViewById(ActivityCompat.java:363)
at androidx.navigation.Navigation.findNavController(Navigation.java:58)
at com.example.heirup.ui.profile.ProfileFragment.onCreateView(ProfileFragment.java:38)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)
at androidx.fragment.app.FragmentManagerImpl.addAddedFragments(FragmentManagerImpl.java:2100)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1874)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1830)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7081)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
I/Process: Sending signal. PID: 17523 SIG: 9
解决方案
findNavController(View v)
与参数一起使用root.findViewById(#your nav_host id)
推荐阅读
- javascript - Firebase Auth - 从自定义令牌创建会话 cookie
- javascript - 使用 ReactJoyride 跨多个页面进行导览
- angular - Angular从多个选择中获取Formdata
- mysql - 什么是 mysql 中的就地操作?
- python - Django 模型中的不同时区
- javascript - 保存状态在 React Native 中不能异步工作
- javascript - 使用自定义 NonNullableArrItems 类型将类型转换为 NonNullable 的部分调用
- javascript - 从datalist输入列表如何确定元素的数量
- github - GitHub 和 Fork 问题的可见性更改
- reactjs - 为更新突变解构对象