问题
Android开发 button 按钮点击两次 响应onclick方法
详细问题
笔者xml代码
<!-- 一个按钮 -->
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"android:text="绑定" android:textSize="25sp" tools:ignore="HardcodedText" />
笔者java核心代码
button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (button1.getText() == "绑定") {// 如果按钮文本是"绑定",执行绑定操作// new WheatRequestTask(LoginActivity.userId, agriculturalParameterArrayList.get(0).getWheatId(), true).execute();button1.setText("解绑");} else {// 如果按钮文本不是"绑定",执行解绑操作// new WheatRequestTask(LoginActivity.userId, agriculturalParameterArrayList.get(0).getWheatId(), false).execute();button1.setText("绑定");}}
});
按照笔者代码 本应该点击一次按钮 响应onclick方法,但实际上启动页面第一次点击操作 需要点击两次,方会响应onclick方法。
解决方案
解决方案一:
修改Java代码:
对于字符串内容相同的判断,使用equals方法
对于笔者而言:
即修改:
if (button1.getText() == "绑定") {}
为
if (button1.getText().equals("绑定")) {}
解决方案二:
修改Java代码:
在java代码中显视声明button按钮的文本内容
对于笔者而言:
即增加如下代码:
button1.setText("绑定")
// 保持不变
button1.setOnClickListener(new View.OnClickListener() {}
产生原因
在Java代码中对按钮的文本内容进行比较时使用了==运算符,这样的比较方式会比较对象的引用而不是它们的值。因此,即使按钮的文本内容是"绑定",也无法正确地触发点击事件。
解决原因
对于解决方案一:修改Java代码,使用equals()方法来比较字符串的内容是否相等,而不是使用==运算符。
对于解决方案二,笔者也不太清楚为何解决
但是添加
button1.setText("绑定")
后,使
button1.getText() == "绑定"
成立
因此,可推断。对于代码button1.setText(“绑定”),"绑定"字符串对象与button1.getText()所获取为一个对象,因此对象的引用相同,故满足
button1.getText() == "绑定"
总结
这是一个低级但易错的问题,但是有趣的是,对于这个低级但易错的"问题",编译器没有给出黄底色警告,可见,编译器并不认为这是开发者所犯的错误,而是确实可以使用这种语法格式,这也从一定程度上解释了解决方案二。
参考文献
产生原因与解释原因部分 部分内容参考chatgpt
原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈