Android Studio(Java):跨包从HomeFragment按钮启动TestApp Activity
解决Fragment按钮启动Activity的问题
你的代码存在几个关键问题,修复后即可正常运行:
按钮初始化顺序错误
你在初始化binding之前就调用了button.findViewById(R.id.button),且是用未赋值的button对象调用,会直接触发空指针异常。应该通过ViewBinding直接获取按钮实例:// 替换原按钮初始化代码 button = binding.button; // ViewBinding会自动根据布局id生成对应变量Fragment中上下文获取错误
Fragment不能直接使用getApplicationContext()启动Activity,需改用requireContext()或getActivity():Intent intent = new Intent(requireContext(), TestApp.class); startActivity(intent);未绑定按钮点击事件
要么在XML布局中给按钮添加android:onClick="openAc"属性,要么在代码里手动设置点击监听器:button.setOnClickListener(v -> openAc(v));
修复后的完整代码:
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { HomeViewModel homeViewModel = new ViewModelProvider(this).get(HomeViewModel.class); binding = FragmentHomeBinding.inflate(inflater, container, false); View root = binding.getRoot(); // 通过ViewBinding获取按钮 button = binding.button; // 设置点击事件 button.setOnClickListener(v -> openAc(v)); final TextView textView = binding.textHome; homeViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); return root; } public void openAc(View view){ Intent intent = new Intent(requireContext(), TestApp.class); startActivity(intent); } @Override public void onDestroyView() { super.onDestroyView(); binding = null; }
内容的提问来源于stack exchange,提问作者Killner
相关产品推荐
相关产品推荐

