Android动态添加Button并绑定点击触发已有onClick方法的问题咨询
问题原因
XML中声明的android:onClick="onClick"属于系统布局解析阶段的自动绑定逻辑,框架会自动为该View生成点击监听器,触发时调用你声明的同名方法。动态创建的View不会走XML解析逻辑,因此不会自动绑定点击事件,需要手动设置。
你之前尝试的performClick()、callOnClick()是手动触发点击事件的API,不是用来绑定监听的,且这两个方法不存在接收字符串参数的重载,你猜测的传参写法不符合API规范。
解决方法
在创建动态Button的代码中,手动为Button设置点击监听器,直接关联你已经实现的onClick方法即可。
修正后的代码示例
if (_layout == R.layout.fragment_general) { LinearLayout layout = view.findViewById(R.id.root); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { for(String text : readFromSharedPreferences(getContext())) { Button btn = new Button(this.getContext()); btn.setText(text); btn.setTag(text); btn.setTextColor(Color.BLUE); btn.setBackgroundColor(Color.RED); // 新增这一行绑定点击事件,方法引用指向你已有的onClick方法 btn.setOnClickListener(this::onClick); // 如果你的onClick方法定义在宿主Activity中,改成如下写法 // btn.setOnClickListener(getActivity()::onClick); layout.addView(btn); } } }
如果你的Java版本不支持方法引用,也可以用匿名内部类写法:
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 调用你已有的onClick方法即可 你当前的Activity或Fragment类名.this.onClick(v); } });
内容的提问来源于stack exchange,提问作者xRay
相关产品推荐
相关产品推荐

