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")); }
解决方案
首先你这段代码有两个明显问题:
if语句末尾多了个分号,导致条件判断后没有执行任何逻辑(分号代表空语句)- 通过
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
相关产品推荐
相关产品推荐

