Android开发 button 按钮点击两次 响应onclick方法

问题

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() {
    @Override
    public 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

原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
请添加图片描述

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以通过以下步骤在 Android Studio 中给按钮增加 onClick 方法: 1. 打开 layout 文件,找到要添加 onClick 方法按钮。 2. 在按钮的 XML 标签中添加 onClick 属性,属性值为需要绑定的方法名,例如: ``` <Button android:id="@+id/my_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click me" android:onClick="onButtonClick" /> ``` 3. 在相应的 Activity 中添加绑定的方法方法名与 onClick 属性值相同,例如: ``` public void onButtonClick(View view) { // 实现按钮点击后的逻辑 } ``` 4. 运行应用程序并测试按钮是否正常工作。 注意:如果方法名或参数不正确,则会导致应用程序崩溃。 ### 回答2: 在Android Studio中为按钮添加onClick方法,可以通过以下步骤完成: 步骤一:打开Android Studio,打开布局文件的XML代码。 步骤二:定位到您要为其添加onClick方法按钮标签。 步骤三:在按钮标签中添加 `android:onClick` 属性,属性值为您想要设置的方法名称。例如:`android:onClick="myOnClickMethod"`。 步骤四:接下来,需要在对应的Activity或Fragment中编写与方法名称相对应的函数。在该函数中编写您需要执行的操作。 步骤五:回到Java代码的Activity或Fragment文件,找到该方法并进行实现。 以下是一些示例代码来说明以上步骤: 布局文件中的按钮标签: ``` <Button android:id="@+id/my_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击我" android:onClick="myOnClickMethod" /> ``` Java代码的Activity或Fragment文件: ``` public class MainActivity extends AppCompatActivity { // ... public void myOnClickMethod(View view) { // 执行您想要的操作 Toast.makeText(this, "按钮点击了", Toast.LENGTH_SHORT).show(); } } ``` 通过以上步骤,您就可以为按钮增加onClick方法了。当按钮点击时,指定的方法将会被调用并执行您在该方法中编写的操作。记得在XML布局文件中为按钮添加onClick属性并在Java代码文件中实现相应的方法。 ### 回答3: 在Android Studio中,给按钮增加onClick方法有两种常见的方法方法一:使用XML布局文件 1. 打开你的XML布局文件,找到你想要增加onClick方法按钮的标签。 2. 在按钮标签中添加一个属性:android:onClick="methodName",其中methodName是你想要自定义的方法名。 3. 在你的Activity类中,定义一个与上一步中指定的方法名相同的方法,如public void methodName(View view)。 4. 在方法内部编写你想要执行的代码逻辑。 方法二:使用匿名内部类 1. 打开你的Java或Kotlin文件,找到你想要增加onClick方法按钮的对象。 2. 在按钮对象的声明或初始化语句后,使用setOnClickListenter()方法按钮添加监听器。 3. 在setOnClickListenter()方法中,创建一个匿名内部类,实现OnClickListener接口。 4. 在匿名内部类的onClick(View view)方法中,编写你想要执行的代码逻辑。 无论采用哪种方法,你可以在onClick方法中进行按钮点击后的操作,例如跳转到另一个Activity、弹出提示信息、更新界面等。 需要注意的是,onClick方法中的参数View view是指当前点击按钮对象,你可以通过调用它的相关方法来获取按钮信息和执行相应的操作。 以上是两种常见的方法,你可以根据个人偏好和实际应用场景选择适合的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞滕人生TYF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值