Fragment中的Button响应事件处理

ferraborghini 2016-03-24 12:57:23
1、 Fragment实现了View.OnClickListener,重写了onClick方法,但是无响应。
2、在Fragment填充的布局文件中的Button设置onClick属性,在Fragment中不能实现。
3、但是在onCreateView中给Button添加监听事件,就可以做到相应。
...全文
514 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
KingfarOu 2016-03-26
  • 打赏
  • 举报
回复
我印象中布局文件里的"onclick"属性只能指向活动里的方法,不能指向Fragment里的方法,所以如果想要响应点击事件,你必须在Fragment里面"findViewByID()"然后进行“setOnclickListener”
xiaomike618 2016-03-26
  • 打赏
  • 举报
回复
你在Fragment实现了onClickListener接口,你的Button也要设置监听器才行啊,比如:btn.setOnClickListener(this); this指的是Fragment实例对象。
xingzhong128 2016-03-24
  • 打赏
  • 举报
回复
这个是因为在xml中实现的android:onClick解析代码在View中: case R.styleable.View_onClick: if (context.isRestricted()) { throw new IllegalStateException("The android:onClick attribute cannot " + "be used within a restricted context"); } final String handlerName = a.getString(attr); if (handlerName != null) { setOnClickListener(new DeclaredOnClickListener(this, handlerName)); } break; 可以看到处理这个onClick属性时framework的默认实现是新建乐意个DeclaredOnClickListener的回调对象 private static class DeclaredOnClickListener implements OnClickListener { private final View mHostView; private final String mMethodName; private Method mMethod; public DeclaredOnClickListener(@NonNull View hostView, @NonNull String methodName) { mHostView = hostView; mMethodName = methodName; } @Override public void onClick(@NonNull View v) { if (mMethod == null) { mMethod = resolveMethod(mHostView.getContext(), mMethodName); } try { mMethod.invoke(mHostView.getContext(), v); } catch (IllegalAccessException e) { throw new IllegalStateException( "Could not execute non-public method for android:onClick", e); } catch (InvocationTargetException e) { throw new IllegalStateException( "Could not execute method for android:onClick", e); } } .......... // 其他代码 } 这个对象的onClick回调函数里使用反射实现的调用,反射的对象是getContext()也就是view所在的activity,所以如果你在actiivty的layout里定义了onclick属性的回调方法,并且在在activity里实现了方法,那么就可以响应。在fragment里定义的方法不会作为android:onClick属性的回调方法。
wei220000 2016-03-24
  • 打赏
  • 举报
回复
Fragment实现了View.OnClickListener,重写了onClick方法-----那你有给button绑定setonclicklistener吗? 在Fragment填充的布局文件中的Button设置onClick属性------那你有添加对应的click方法吗?

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧