Android Studio中触发changeBackgroundOfStreamPage方法找不到异常求助
问题根源:方法签名不匹配
从你贴出的异常日志里,最关键的线索就是这行:
java.lang.NoSuchMethodException: changeBackgroundOfStreamPage [class android.view.View]
这说明Android系统在尝试调用带View参数的changeBackgroundOfStreamPage方法,但你代码里定义的方法是无参的,所以系统找不到对应的方法,直接抛出了异常——和你里面修改背景的逻辑其实没关系。
快速解决步骤
修正方法签名
XML中绑定android:onClick的方法必须接收一个View类型的参数(系统会自动把被点击的控件传进来),把你的方法改成下面这样:public class StreamPageMain extends Activity { public void changeBackgroundOfStreamPage(View view){ // 你之前的任意一种实现方式现在都能正常工作,比如: ConstraintLayout mConstraintLayout = (ConstraintLayout)findViewById(R.id.constraintLayout); mConstraintLayout.setBackgroundResource(R.drawable.streaming_background_grey); } }注意:方法必须保持
public权限,参数类型必须是android.view.View(不能是子类,比如Button)。额外验证(确保万无一失)
- 确认XML里按钮的
android:onClick属性值和方法名完全一致(包括大小写),比如:<Button android:id="@+id/button4" android:onClick="changeBackgroundOfStreamPage" ... /> - 检查你的
ConstraintLayout确实在当前Activity的布局文件中,且IDconstraintLayout拼写完全正确。
- 确认XML里按钮的
为什么之前的this.没用?
其实this.本身没有问题,真正的矛盾点不是找不到布局或者Activity实例,而是方法签名不符合系统的调用规则——系统触发点击事件时会强制传递一个View参数,你的方法没有接收这个参数,所以才会抛出“找不到方法”的异常,和你内部的背景修改逻辑无关。
内容的提问来源于stack exchange,提问作者Peter Sagichnit
相关产品推荐
相关产品推荐

