Android实现按钮每点击20次触发指定方法功能失效求助
问题排查
你代码里存在3处核心逻辑错误,导致计数永远无法达到20的触发阈值:
- 你没有将自增后的点击次数回写到SharedPreferences中,每次点击都会重新读取初始默认值0,自增后仅在当前方法作用域内有效,下一次点击又会重置为0,永远无法累计到20
- 你声明并初始化的是自定义文件名的SharedPreferences实例,但读取时用的是系统默认的
getDefaultSharedPreferences,两者对应完全不同的存储文件,就算你提前存了值也读不到 - 可选优化:你调用
this.turnAround()时的this指向的是OnClickListener内部类实例,虽然当前逻辑不影响执行,但若后续要访问外部类方法建议显式指定上下文避免歧义
修正后的代码
修改onClick内的逻辑即可:
changeTextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v){ // 改用你自己初始化的自定义SharedPreferences实例读取 long nb_shown_lobby = sharedpreferences.getLong("nShownLobby", 0); ++nb_shown_lobby; if ((nb_shown_lobby % 20) == 0) { turnAround(); } // 将自增后的计数回写到SharedPreferences持久化存储 SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putLong("nShownLobby", nb_shown_lobby); editor.apply(); // 原有逻辑保持不变 int random = (int) (Math.random() * manyDifferentStrings.length); if (random == oldVaue) { random = (int) (Math.random() * manyDifferentStrings.length); } changingText.setText(manyDifferentStrings[random]); oldVaue = random; try { mySound.start(); } catch (NullPointerException e) { mySound = MediaPlayer.create(MainActivity.this, R.raw.sound); } } private void turnAround() { //Do something here Log.i("Do Something ", ""); } });
内容的提问来源于stack exchange,提问作者DannyRoy
相关产品推荐
相关产品推荐

