You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何在onClick中判断按钮ID是否包含指定短语?

Android计分应用统一点击事件的队伍判断问题

我正在开发一款简单的计分应用,包含四组分数,每组对应一个加分按钮和减分按钮。为了简化代码,我把所有按钮的onClick事件统一设置成addScore或subScore。按钮ID格式比如@+id/team1AddButton,现在需要在onClick方法里判断当前操作对应的是哪支队伍。

按钮布局代码(简化后):

<Button
    android:id="@+id/team1AddButton"
    android:layout_width="55dp"
    android:layout_height="75dp"
    android:text="+"
    android:onClick="addScore" />

<Button
    android:id="@+id/team1SubButton"
    android:layout_width="55dp"
    android:layout_height="75dp"
    android:text="-"
    android:onClick="addScore" />

我遇到的Java代码问题:

现在写的判断逻辑有问题,代码如下:

public void addScore(View v) {
    if (v.getId().toString().contains("team1"));

}

解决方案

首先你这段代码有两个明显问题:

  1. if语句末尾多了个分号,导致条件判断后没有执行任何逻辑(分号代表空语句)
  2. 通过v.getId().toString()获取ID字符串的方式不够可靠,而且效率偏低

方法一:直接对比资源ID(推荐)

Android会为每个控件ID生成对应的常量,直接对比这些常量是最高效且可靠的方式:

public void addScore(View v) {
    int buttonId = v.getId();
    if (buttonId == R.id.team1AddButton) {
        // 执行队伍1的加分操作
        updateScore(0, +1); // 假设用数组存分数,0对应队伍1索引
    } else if (buttonId == R.id.team1SubButton) {
        // 执行队伍1的减分操作
        updateScore(0, -1);
    } else if (buttonId == R.id.team2AddButton) {
        updateScore(1, +1);
    } else if (buttonId == R.id.team2SubButton) {
        updateScore(1, -1);
    }
    // 继续添加其他队伍的按钮判断
}

// 抽离分数更新逻辑,让代码更整洁
private void updateScore(int teamIndex, int change) {
    int[] scores = {0, 0, 0, 0}; // 初始化四组分数
    // 防止分数变为负数
    if (scores[teamIndex] + change >= 0) {
        scores[teamIndex] += change;
        // 这里更新UI显示分数,比如找到对应TextView设置文本
    }
}

方法二:优化字符串判断(如果坚持用ID名称)

如果一定要通过ID名称判断,记得修正语法问题,并且用更稳妥的方式获取ID名称:

public void addScore(View v) {
    String idName = getResources().getResourceEntryName(v.getId());
    // 判断队伍
    if (idName.startsWith("team1")) {
        // 判断是加分还是减分
        if (idName.contains("Add")) {
            // 队伍1加分
        } else if (idName.contains("Sub")) {
            // 队伍1减分
        }
    } else if (idName.startsWith("team2")) {
        // 同理处理队伍2
    }
}

内容的提问来源于stack exchange,提问作者Speedy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:37:36