2013-05-06 95 views
2

嗨!将自定义首选项与PreferenceFragment结合使用

我有一个扩展DialogPreference的自定义首选项类。我需要将它与我的PreferenceFragment类绑定(我从这里获得:http://stackoverflow.com/questions/5533078/timepicker-in-preferencescreen)。如何实现?我是否需要在我的preferences.xml布局文件中声明自定义的DialogPrefrence?

这里的DialogPreference类:

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) { 
     this(ctxt, null); 
    } 

    public TimePreference(Context ctxt, AttributeSet attrs) { 
     this(ctxt, attrs, 0); 
    } 

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

     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); 
    } 
} 

非常感谢您!

回答

7

在偏好片段,你需要从预定义的XML负载的偏好:在你的preferences.xml以同样的方式

public static class MyPreferenceFragment extends PreferenceFragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Load the preferences from an XML resource 
     addPreferencesFromResource(R.xml.preferences); 
    } 
} 

使用自定义的首选项对话框,如果它是一个自定义视图:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 

    <com.example.TimePreference 
     android:key="prefKey" 
     android:defaultValue="00:00" 
     android:summary="@string/pref_summary" 
     android:title="@string/pref_title" /> 

</PreferenceScreen> 
+0

谢谢,这解决了我的问题。 – geekkid 2013-05-06 18:59:52

+0

感叹,忘了前缀。 – 2015-06-12 08:17:17

相关问题