1

Я хочу использовать DatePickerFragment внутри PreferenceFragment для даты рождения. Можем ли мы использовать его так же, как мы используем EditTextPreference или что-то еще, что нам нужно использовать. Я знаю, как базовые функции DatePickerFragemnt и PreferenceFragment.Как использовать DatePickerFragment внутри PreferenceFragment для получения даты

Любая помощь предоставляется.

Edited

.xml файл для Preferences

<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

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

Добавить в Preference тегов в файле .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-файл, чтобы показать дату и по выбору этого, я открою пользовательский фрагмент диалога. –

+0

Вы можете добавить его непосредственно на экран настроек xml,

+0

Не работает так. Также, если он добавлен, то как вызвать DatePickerFragment вместо DialogPreference. ? –