簡體   English   中英

如何在取消按鈕上清除時間選擇器的共享首選項?

[英]How to Clear shared Preference for a Time Picker on Cancel button?

我正在處理一個項目,我有兩個按鈕和一個文本視圖(在布局中),用於時間選擇器來設置通知、buttonTimepicker 和 buttonCancelAlarm。

我曾經保存時間,通過共享首選項在時間選擇器中選擇。 共享首選項工作正常。

但我面臨的問題是,當我點擊取消按鈕時,我的應用程序仍然向我顯示時間選擇器設置的通知,即使我已經實現了editor.clear(); 單擊“取消”按鈕 Listner 時共享首選項。

當我刪除共享首選項時,它會正常工作,取消時間和通知。

在這里,我想要的是在“設置時間”按鈕上的共享首選項中保存時間,並在取消時間按鈕上清除共享首選項。

 public class drvschedule extends AppCompatActivity implements 
 TimePickerDialog.OnTimeSetListener {

 private TextView mTextView;
 SharedPreferences myPrefdrv;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_drvschedule);

    mTextView = findViewById(R.id.drtmslctd);

    Button buttonTimePicker = findViewById(R.id.setdrvtm);
    buttonTimePicker.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DialogFragment timePicker = new TimePickerFragment();
            timePicker.show(getSupportFragmentManager(), "time picker");
        }
    });

    Button buttonCancelTime = findViewById(R.id.cncldrvtm);
    buttonCancelTime.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            SharedPreferences.Editor editor=myPrefdrv.edit();
            editor.clear();
            editor.apply();
            cancelAlarm();
        }
    });
    myPrefdrv=getPreferences(MODE_PRIVATE);
 }

 @Override
 public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    Calendar c = Calendar.getInstance();
    c.set(Calendar.HOUR_OF_DAY, hourOfDay);
    c.set(Calendar.MINUTE, minute);
    c.set(Calendar.SECOND, 0);

    updateTimeText(c);
    startAlarm(c);
 }

 private void updateTimeText(Calendar c) {
    String timeText = "Notification set for Driving: ";
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        timeText += 
 DateFormat.getTimeInstance(DateFormat.SHORT).format(c.getTime());
    }

    mTextView.setText(timeText);
 }

 private void startAlarm(Calendar c) {
    AlarmManager alarmManager = (AlarmManager) 
  getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, AlertReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, 
   intent, 0);

    if (c.before(Calendar.getInstance())) {
        c.add(Calendar.DATE, 1);
    }
    SharedPreferences.Editor editor=myPrefdrv.edit();
    editor.apply();

    alarmManager.setExact(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 
 pendingIntent);
}

private void cancelAlarm() {
    AlarmManager alarmManager = (AlarmManager) 
getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, 
intent, 0);
    alarmManager.cancel(pendingIntent);
    mTextView.setText("Notification canceled");

 }
}



//used to save preferences....
SharedPreferences.Editor editor=myPrefdrv.edit();
editor.apply();

//used to clear preference....
SharedPreferences.Editor editor=myPrefdrv.edit();
editor.clear();
editor.apply();

請嘗試使用此代碼來存儲、獲取和清除共享首選項數據

我們在這個方法中傳遞了兩個參數 getsharedpreferences(String PREFS_NAME ,int mode )

PREFS_NAME 是文件的名稱。

mode 是操作模式。

存儲數據

 SharedPreferences pref = getSharedPreferences("mypref", 0);
        SharedPreferences.Editor editor = pref.edit();
        editor.putString("deviceToc",token); // Storing string
        editor.apply();

獲取數據

 SharedPreferences sharedpreferences = getSharedPreferences("mypref", 0);
        SharedPreferences prefs = sharedpreferences;
        String string = prefs.getString("deviceToc", null);

清除數據

 SharedPreferences sharedpreferences = getSharedPreferences("mypref", 0);
        sharedpreferences.edit().clear().commit();

您可以使用它代替時間選擇器

editors.putLong("lastlogin", new Date().getTime());

這個答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM