Fragment中按钮OnClickListener失效问题排查求助
解决Fragment中按钮无法响应点击的问题
嘿,这个问题我一眼就瞅出症结啦!咱们来拆解下你的代码问题:
先看你原代码里的关键部分:
// private Button button; LayoutInflater lf; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { lf=inflater; View view = inflater.inflate(R.layout.fragment_home, container, false); Button button = (Button) view.findViewById(R.id.home_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(lf.getContext(),sunhan_activity.class); startActivity(intent); } }); return inflater.inflate(R.layout.fragment_home, container, false); }
问题出在最后一行的返回值上:你先创建了一个view对象,在这个view上找到了按钮并绑定了点击事件,但最后却重新inflate了一个全新的view返回——这就导致你之前设置好点击逻辑的那个view根本没被展示在界面上,当前显示的是一个完全没绑定事件的新view,按钮自然不会响应点击啦!
修复后的代码
只需要把返回值改成你已经初始化并绑定好事件的那个view就行:
// private Button button; LayoutInflater lf; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { lf=inflater; View view = inflater.inflate(R.layout.fragment_home, container, false); Button button = (Button) view.findViewById(R.id.home_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 这里用view.getContext()或者getActivity()获取上下文会更稳妥哦 Intent intent=new Intent(view.getContext(),sunhan_activity.class); startActivity(intent); } }); // 返回已经设置好点击事件的view return view; }
内容的提问来源于stack exchange,提问作者user10566110
相关产品推荐
相关产品推荐

