Каксоздать таймер на кнопку и сохранить его в sharedpreferences?
Как можно сохранить данные о том, что человек нажал на кнопку и запустился таймер, но так, что бы после перезапуска приложения таймер не сбрасывался Вот сам код кнопки таймера, а как сохранить значения?
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn.setEnabled(false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
btn.setEnabled(true);
}
},20000);
}
});
Ответы (1 шт):
Автор решения: Vind Iskald
→ Ссылка
public class FirstFragment extends Fragment {
private FragmentFirstBinding binding;
SharedPreferences mShPrefs = null;
private final Handler mHandler = new Handler();
private int time = 0;
private final int timeLimit = 20;
private Boolean isActive = false;
private final Runnable countdownTask = new Runnable() {
@Override
public void run() {
if (time <= 0) {
isActive = false;
setButtonEnabled(true);
} else {
time--;
mHandler.postDelayed(this, 1000);
}
}
};
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState
) {
binding = FragmentFirstBinding.inflate(inflater, container, false);
return binding.getRoot();
}
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
binding.buttonFirst.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!isActive) {
startTimer();
}
}
});
}
@Override
public void onResume() {
super.onResume();
mShPrefs = requireContext().getSharedPreferences("prefs", Context.MODE_PRIVATE);
time = mShPrefs.getInt("time", 0);
SharedPreferences.Editor editor = mShPrefs.edit();
editor.clear().apply();
if (time > 0) startTimer();
}
private void startTimer() {
time = timeLimit;
setButtonEnabled(false);
mHandler.postDelayed(countdownTask, 1000);
}
private void setButtonEnabled(Boolean isEnabled) {
binding.buttonFirst.setEnabled(isEnabled);
}
@Override
public void onStop() {
mHandler.removeCallbacks(countdownTask);
if (time > 0) {
SharedPreferences.Editor editor = mShPrefs.edit();
editor.putInt("time", time).apply();
}
super.onStop();
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}