1

我想在PreferenceFragment中使用DatePickerFragment作爲出生日期。我們可以像我們使用EditTextPreference或其他任何我們必須使用的方式來使用它。我知道DatePickerFragemnt和PreferenceFragment基本功能如何。如何在PreferenceFragment中使用DatePickerFragment獲取日期

任何幫助appriciated。

被修改

用於設定

<PreferenceCategory android:title="@string/pref_profile_setting" > 
     <EditTextPreference 
       android:title="@string/pref_user_name" 
       android:summary="@string/pref_user_name_summary" 
       android:key="prefName"/> 

     <com.mypkg.DatePickerFragment 
      android:title="@string/pref_gender" 
       android:summary="@string/pref_postcode_summary" 
       android:key="prefDob" 
       /> 
     <ListPreference 
       android:title="@string/pref_gender" 
       android:summary="@string/pref_postcode_summary" 
       android:key="prefGender" 
       android:entries="@array/gender" 
       android:entryValues="@array/gender_type"/> 

    </PreferenceCategory> 
</PreferenceScreen> 

類延長PreferenceFragment

.xml文件
public class MyFragment extends PreferenceFragment implements OnPreferenceChangeListener{ 


    private EditTextPreference etNamePref; 
    private ListPreference lvGenderPref; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.pref_settings); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, 
      ViewGroup container, Bundle paramBundle) { 
     View view = inflater.inflate(R.layout.fragment_settings, container, false); 
     initView(); 

     return view; 
    } 


    private void initView() { 
     etNamePref = (EditTextPreference)findPreference(ConstantsUtil.PREF_NAME); 
     etNamePref.setOnPreferenceChangeListener(this); 

    } 


    @Override 
    public boolean onPreferenceChange(Preference preference, Object newValue) { 
     String key = preference.getKey(); 
     if(key.equalsIgnoreCase(ConstantsUtil.PREF_NAME)){ 
      etNamePref.setSummary(newValue.toString()); 
     } 
     return false; 
    } 
} 

回答

1

上添加標籤偏好在你的.xml文件

<PreferenceCategory android:title="@string/pref_profile_setting" > 
     <EditTextPreference 
       android:title="@string/pref_user_name" 
       android:summary="@string/pref_user_name_summary" 
       android:key="prefName"/> 

<Preference android:title="@string/pref_select_dob" 
      android:key="prefDob" > 
     <ListPreference 
       android:title="@string/pref_gender" 
       android:summary="@string/pref_postcode_summary" 
       android:key="prefGender" 
       android:entries="@array/gender" 
       android:entryValues="@array/gender_type"/> 

    </PreferenceCategory> 
</PreferenceScreen> 

在的.java類實現OnPreferenceClickListener及以下代碼

Preference preference = (Preference)findPreference("prefDob"); 
     preference.setOnPreferenceClickListener(this); 

裏面的onClick調用DatePickerFragment像下面

@Override 
    public boolean onPreferenceClick(Preference preference) { 
     String key = preference.getKey(); 
     if(key.equalsIgnoreCase("prefDob")){ 
      showDatePicker(); 
     } 
     return false; 
    } 

    protected void showDatePicker() { 

     DatePickerFragment date = new DatePickerFragment(); 

     /** 
     * Set Up Current Date Into dialog 
     */ 

     Calendar calender = Calendar.getInstance(); 
     Bundle args = new Bundle(); 
     args.putInt("year", calender.get(Calendar.YEAR)); 
     args.putInt("month", calender.get(Calendar.MONTH)); 
     args.putInt("day", calender.get(Calendar.DAY_OF_MONTH)); 
     date.setArguments(args); 

     /** 
     * Set Call back to capture selected date 
     */ 

     date.setCallBack(ondate); 
     date.show(getFragmentManager(), "Date Picker"); 

    } 
    OnDateSetListener ondate = new OnDateSetListener() { 
     @Override 
     public void onDateSet(DatePicker view, int year, int monthOfYear, 
       int dayOfMonth) { 
      String dob = String.valueOf(dayOfMonth) + "/" + String.valueOf(monthOfYear)+ "/" + String.valueOf(year); 

     } 
    }; 

完成!

1

你必須創建自己的自定義DialogPreference的,像下面

public class DatePickerPreference extends DialogPreference { 


    public DatePickerPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public DatePickerPreference(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) { 
     // TODO :: Set the initial value of the Preference. 
    } 

    @Override 
    protected View onCreateDialogView() { 
     return new DatePicker(getContext()); 
    } 

    @Override 
    protected void onDialogClosed(boolean positiveResult) { 
     // TODO :: Save data to the SharedPreferences. 
    } 

} 
+0

那麼我該如何從PrefrenceFragment打開對話框的首選項呢?另外,我將放置在xml文件中的哪個控件顯示日期和選擇,我將打開自定義對話框片段。 – 2014-11-24 10:00:50

+0

您可以直接將其添加到您的首選項屏幕xml 2014-11-24 10:09:35

+0

不以這種方式工作。此外,如果它被添加,那麼如何調用DatePickerFragment來代替DialogPreference。 ? – 2014-11-24 10:20:33

相關問題