2015-11-28 19 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给我一些时间,我会告诉 –