Мне кажется, что ваш код, а именно editor.apply();
работает следующим образом:
вы пытаетесь сохранить прогресс, и иногда случается так, что он вызывается несколько раз подряд. Согласно документации , если вы отправляете несколько команд apply()
или commit()
, будет выполнена только последняя. Поэтому некоторые клики могут не обрабатываться.
Я предлагаю вам просто изменить переменную для прогресса и сохранить ее позже:
waterml = sharedPreferences.getInt(WATER_ML, 0);
waterdata = sharedPreferences.getInt(WATER_DATA, 0);
int dailywater = 2838; // example
ml100.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//scale 100 ml
int percent = 100 * 100 / dailywater;
ProgressBarAnimation anim = new ProgressBarAnimation(circlebar, waterdata, (waterdata + percent));
anim.setDuration(300);
circlebar.startAnimation(anim);
dailywater.setText((waterml + 100) + " / " + dailywater + " ml");
waterdata += percent;
waterml += 100;
}
});
, а затем в вашей функции onPause()
вы просто сохраните их :
public void onPause() {
editor = sharedPreferences.edit();
editor.putInt(WATER_DATA, waterdata);
editor.putInt(WATER_ML, waterml);
editor.apply();
}
Если вы хотите, чтобы ваш процент не округлялся, вы можете изменить putInt
на putFloat
и getInt
на getFloat