2011-09-20 89 views
2

我想在首選項屏幕中設置時間選擇器,並允許用戶選擇開始時間和結束時間,並將其存儲爲與其他設置一樣的持續值。如何根據偏好創建開始時間和結束時間選擇器?

您可以顯示設置這個所需的所有編碼,因爲我找不到任何這樣的搜索。

我在想也許時間選擇器應該在對話框中,但我還不知道如何設置這些。如果您可以顯示使用開始和結束時間選擇器調用對話框的代碼,以及如何保存該信息以便稍後從偏好屏幕進行檢索,那將很棒。

所有幫助將不勝感激。

誠然, 伊馬德

回答

5

我有一個簡單TimePreference,我在我的書一個使用:

import android.content.Context; 
import android.content.res.TypedArray; 
import android.preference.DialogPreference; 
import android.util.AttributeSet; 
import android.view.View; 
import android.widget.TimePicker; 

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

    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 time=String.valueOf(lastHour)+":"+String.valueOf(lastMinute); 

     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("00:00"); 
     } 
     else { 
     time=getPersistedString(defaultValue.toString()); 
     } 
    } 
    else { 
     time=defaultValue.toString(); 
    } 

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

生產級執行,這將使用字符串資源兩個按鈕標題。它可能還會對值進行更多的錯誤檢查,以防某些代碼通過SharedPreferences.Editor進行更新並且沒有正確格式化。

+0

感謝您的代碼。我會試驗它並試圖弄清它是如何工作的。 至少我會找出如何佈置對話框屏幕並將其稱爲TimePreference,以便您的代碼與它一起工作。 真的, Emad –

+0

嗨,我一直在尋找一個很長的時間來找到一個示例setting.xml文件,顯示的開始時間和結束時間的項目,有一個很好的圓與向下的箭頭,但無法找到任何東西。你有一些示例代碼顯示如何設置? 謝謝。 真的, Emad –

+0

@ Emad-ud-deen:我不知道你在說什麼,對不起。 – CommonsWare

相關問題