1
我創建了計時器以顯示特定時間的吐司。定時器在打開開關鍵後工作,一旦關閉開關鍵後定時器將被取消。我使用SharedPrefrences來保存切換視圖的狀態。一切工作正常,但是一旦我回到以前的活動並再次打開活動,然後嘗試通過關閉開關鍵取消計時器我得到強制關閉消息。那麼,你有什麼建議來解決這個問題?
驗證碼:
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Switch;
import android.widget.Toast;
public class AutoReminder extends Activity {
TimerTask tt;
Timer t;
Switch mySwitch;
SharedPreferences appPrefs;
String TAG;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auto_reminder);
mySwitch = (Switch) findViewById(R.id.switch1);
appPrefs = getSharedPreferences("ishaqdev.app.hasanat",MODE_PRIVATE);
Boolean setSwitch = appPrefs.getBoolean("switchValue", false);
if (setSwitch == false){
mySwitch.setChecked(false);
}else{
mySwitch.setChecked(true);
}
mySwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if (isChecked) {
SharedPreferences.Editor prefsEditor = appPrefs.edit();
prefsEditor.putBoolean("switchValue", true);
prefsEditor.commit();
tt = new TimerTask()
{
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Hello Timer !!", Toast.LENGTH_SHORT).show();
}
});
}
};
t = new Timer();
t.schedule(tt,0,5000);
} else {
SharedPreferences.Editor prefsEditor = appPrefs.edit();
prefsEditor.putBoolean("switchValue", false);
prefsEditor.commit();
Log.v(TAG, "After SP");
t.cancel();
Log.v(TAG, "Final Step");
}
}
});
}
}
是的確切的計時器是空的,這是問題,我試着你的建議,它不執行t.cancel();所以沒有強制關閉消息以及定時器仍在工作 那麼,解決方案是什麼? –
@ user3104095首先告訴我,當你轉向上一個活動時,吐司仍然顯示正確嗎?如果是的話,那麼你是否想要這個功能,因爲當前面的活動,你可能不會顯示吐司?請讓我清楚。 –
是的,它仍然顯示,我需要它繼續顯示,直到我通過切換鍵 –