如何在onBackPressed中处理分数加减结果?计分器APP开发疑问
解决ScoreKeeper APP的分数加减问题
看起来你已经搞定了从第二个Activity返回数据并显示的基础功能,现在卡在了把返回的数值和当前分数做加减运算这一步。我来帮你梳理问题,给出具体的修改方案:
问题分析
你当前的代码尝试直接把返回的字符串转成整数后加固定值10,但没正确获取mFirstScore的当前分数,也没处理输入非数字的异常情况,另外你注释里提到的message5参数,也需要确保在返回时正确传递。
解决方案步骤
1. 确保第二个Activity返回正确的分数参数
如果你的需求是返回要加减的分数(比如加分值和减值),需要在onBackPressed里同时传递对应参数:
@Override public void onBackPressed() { Intent i = new Intent(); // 传递要添加的分数(假设mEditText是加分输入框) i.putExtra("add_points", mAddEditText.getText().toString()); // 传递要减去的分数(如果有减分输入框的话) i.putExtra("subtract_points", mSubtractEditText.getText().toString()); setResult(RESULT_OK, i); Toast.makeText(this, "分数已提交", Toast.LENGTH_LONG).show(); finish(); }
2. 在MainActivity中处理分数加减逻辑
核心是:先获取mFirstScore的当前分数,再结合返回的数值运算,同时处理输入非数字的异常:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == RESULT_OK) { try { // 1. 获取当前分数,初始状态默认0(比如显示"0") int currentScore = Integer.parseInt(mFirstScore.getText().toString()); // 2. 获取返回的加分值,空输入则默认0 String addStr = data.getStringExtra("add_points"); int addPoints = addStr.isEmpty() ? 0 : Integer.parseInt(addStr); // 3. 获取返回的减值,空输入则默认0 String subtractStr = data.getStringExtra("subtract_points"); int subtractPoints = subtractStr.isEmpty() ? 0 : Integer.parseInt(subtractStr); // 4. 计算新分数 int newScore = currentScore + addPoints - subtractPoints; // 5. 更新显示 mFirstScore.setText(String.valueOf(newScore)); } catch (NumberFormatException e) { // 输入非数字时提示用户,避免崩溃 Toast.makeText(this, "请输入有效的数字分数", Toast.LENGTH_SHORT).show(); } } }
3. 额外优化建议
- 在输入框的XML里设置
android:inputType="numberSigned",限制用户只能输入数字,减少异常情况 - 初始状态下把
mFirstScore的文本设为"0",确保第一次运算不会出现解析错误
关键提醒
- 必须处理
NumberFormatException,否则用户输入非数字内容时APP会崩溃 - 如果你的需求只是单一的加分或减分,只需要传递对应参数即可,不用保留两个输入框
内容的提问来源于stack exchange,提问作者Azkan
相关产品推荐
相关产品推荐

