如何从Fragment中打开Activity?从Home Fragment启动ruki Activity时应用崩溃如何解决
错误原因
- 空指针异常:你声明了全局
ImageButton ruki变量,但在onCreateView中仅对局部变量final ImageButton imageButton做了控件绑定,全局ruki始终为null,后续调用ruki.setOnClickListener(onClickListener)时触发空指针崩溃。 - 布局绑定无效:你先调用
inflater.inflate(R.layout.fragment_home, null)加载了布局并做了点击事件绑定,最终返回时又重新执行inflater.inflate(R.layout.fragment_home, container, false)加载了全新的布局实例,前面所有针对旧布局的操作全部失效。 - 额外排查项:确认
ruki_activity已经在项目的AndroidManifest.xml中完成注册,未注册的Activity启动时也会触发崩溃。
修正后代码
ImageButton ruki; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 仅加载一次布局,使用标准的Fragment布局加载参数 View view = inflater.inflate(R.layout.fragment_home, container, false); // 给全局ruki变量绑定控件,不要冗余创建局部变量 ruki = (ImageButton) view.findViewById(R.id.ruki); View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View view) { switch (view.getId()){ case R.id.ruki: Intent intent = new Intent(HomeFragment.this.getActivity(), ruki_activity.class); startActivity(intent); break; } } }; ruki.setOnClickListener(onClickListener); // 返回已经完成控件绑定的布局实例 return view; }
内容的提问来源于stack exchange,提问作者gojim
相关产品推荐
相关产品推荐

