You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio(Java):跨包从HomeFragment按钮启动TestApp Activity

解决Fragment按钮启动Activity的问题

你的代码存在几个关键问题,修复后即可正常运行:

  1. 按钮初始化顺序错误
    你在初始化binding之前就调用了button.findViewById(R.id.button),且是用未赋值的button对象调用,会直接触发空指针异常。应该通过ViewBinding直接获取按钮实例:

    // 替换原按钮初始化代码
    button = binding.button; // ViewBinding会自动根据布局id生成对应变量
    
  2. Fragment中上下文获取错误
    Fragment不能直接使用getApplicationContext()启动Activity,需改用requireContext()或getActivity():

    Intent intent = new Intent(requireContext(), TestApp.class);
    startActivity(intent);
    
  3. 未绑定按钮点击事件
    要么在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:05:03