2015-11-28 20 views
1

我有一個時間選擇器對話框,我在偏好活動中使用。我希望時間選擇器選擇的時間使用報警服務來安排任務。但我希望timepicker選擇的時間用於鬧鐘。我使用sharedpreference但我無法使它工作。有人可以幫我嗎?如何從timepicker對話框中獲取時間到偏好活動?

這是TimePicker對話框中使用

public class TimePreference extends DialogPreference { 
private int lastHour=0; 
private int lastMinute=0; 
private TimePicker picker=null; 
Context c; 

public static int getHour(String time) { 
    String[] pieces=time.split(":"); 

    return(Integer.parseInt(pieces[0])); 
} 

public static int getMinute(String time) { 
    String[] pieces=time.split(":"); 

    return(Integer.parseInt(pieces[1])); 
} 

public TimePreference(Context ctxt, AttributeSet attrs) { 
    super(ctxt, attrs); 

    setPositiveButtonText("Set"); 
    setNegativeButtonText("Cancel"); 
} 

@Override 
protected View onCreateDialogView() { 
    picker=new TimePicker(getContext()); 

    return(picker); 
} 

@Override 
protected void onBindDialogView(View v) { 
    super.onBindDialogView(v); 

    picker.setCurrentHour(lastHour); 
    picker.setCurrentMinute(lastMinute); 
} 

@Override 
protected void onDialogClosed(boolean positiveResult) { 
    super.onDialogClosed(positiveResult); 

    if (positiveResult) { 
     lastHour=picker.getCurrentHour(); 
     lastMinute=picker.getCurrentMinute(); 
     String hour=String.valueOf(lastHour); 
     String minute=String.valueOf(lastMinute); 

     String time=hour+":"+minute; 

     //Toast.makeText(getContext(), time, Toast.LENGTH_SHORT).show(); 




     if (callChangeListener(time)) { 
      persistString(time); 
     } 
    } 
} 

@Override 
protected Object onGetDefaultValue(TypedArray a, int index) { 
    return(a.getString(index)); 
} 

@Override 
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { 
    String time=null; 

    if (restoreValue) { 
     if (defaultValue==null) { 
      time=getPersistedString("06:00"); 
     } 
     else { 
      time=getPersistedString(defaultValue.toString()); 
     } 
    } 
    else { 
     time=defaultValue.toString(); 
    } 

    lastHour=getHour(time); 
    lastMinute=getMinute(time); 
} 

}

這是偏好活動

final Preference pref2 = getPreferenceManager().findPreference("son"); 
    pref2.setOnPreferenceChangeListener(new  Preference.OnPreferenceChangeListener() { 
     @Override 
     public boolean onPreferenceChange(Preference preference, Object newValue) { 
      if (newValue.equals(true)) { 
       // Toast.makeText(getActivity(), "True", Toast.LENGTH_SHORT).show(); 
       //set alarm will come here 
       Long time = new GregorianCalendar().getTimeInMillis() + 5000; 
       Intent i2 = new Intent(getActivity(), AlarmReceiver.class); 
       AlarmManager alrm = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); 
       alrm.set(AlarmManager.RTC_WAKEUP, time, PendingIntent.getBroadcast(getActivity(), 1, i2, PendingIntent.FLAG_UPDATE_CURRENT)); 
       Toast.makeText(getActivity(), "Alarm Scheduled for 5 seconds from now", Toast.LENGTH_SHORT).show(); 
      }else { 
       Toast.makeText(getActivity(), "Schedule canceled", Toast.LENGTH_SHORT).show(); 
      } 
      return true; 
     } 
    }); 

在這裏,我想通過timepicker對話框中選擇了時間的複選框偏好而不是我上面使用的「時間」。

這是偏好活動

<?xml version="1.0" encoding="utf-8"?> 
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 


<PreferenceCategory android:title="Schedule On"> 
    <CheckBoxPreference 
    android:title="Schedule Power On" 

    android:key="son" 
    android:defaultValue="false" 

    > </CheckBoxPreference> 
<com.example.myapp.TimePreference 
    android:key="timePrefA_Key" 
    android:title="Pick Time"/> 
</PreferenceCategory> 
</PreferenceScreen>  

編輯

 @Override 
public void onPause() { 
    super.onPause(); 

    SharedPreferences.Editor editor = mSharedPref.edit(); // get the pref editor 
    editor.putString("key1", stringtt); // assign value to the key 
    editor.commit(); // save the editors modifications 
} 
@Override 
public void onResume(){ 
    super.onResume(); 
    SharedPreferences.Editor editor2 = mSharedPref.edit(); 
    editor2.getString("key1", null); 
}   
+0

On Preference是否需要打開對話框? –

+1

不,我可以打開對話框。和時間選擇器完美的工作。但我希望timepicker選擇我的偏好活動的時間。即包含鬧鐘的複選框首選項 –

+0

要打開對話框,您可以更新該對話框嗎? –

回答

3

的xml文件試試這個下面我使用的代碼檢查時,NEWVALUE你會得到代碼是你從時間選擇的時間偏好對話框。

Preference preference = getPreferenceManager().findPreference("timePrefA_Key"); 
    preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
      @Override 
      public boolean onPreferenceChange(Preference preference, Object newValue) { 
       Log.d("Preference ", "" + preference); 
       Log.d("newValue", "" + newValue); 
       return true; 
      } 
     }); 
+0

非常感謝。它的工作:) –

+0

字符串tt = newValue.toString(); preference.setTitle(tt);我試過你的代碼,它的工作正常。我添加了這個代碼來設置我選擇標題的時間,以及它的工作。但是當我離開那個頁面並返回時,標題被重置。我如何保留我設置的標題? –

+0

@shinil給我一些時間,我會告訴 –