android - 如何在 PreferenceFragment 中使用 DatePickerFragment 获取日期

标签 android android-fragments preferenceactivity preferencefragment

我想在 PreferenceFragment 中使用 DatePickerFragment 作为出生日期。我们可以像使用 EditTextPreference 或其他任何我们必须使用的方式那样使用它吗?我知道 DatePickerFragemnt 和 PreferenceFragment 的基本功能。

任何帮助都适用。

已编辑

首选项的 .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"/>

        <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>

Class that extended the 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;
    }
}

最佳答案

在您的 .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);

        }
    };

完成!

关于android - 如何在 PreferenceFragment 中使用 DatePickerFragment 获取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27100340/

相关文章:

android - 在 android 上使用屏幕 fragment

java - 设置 Activity 中的 if()

android - PreferenceActivity 中的自定义标题栏(摘要)

android - 有什么办法可以捕捉电话接听事件吗?

android - 如何在主屏幕上自动测试小部件?

java - Android:在根项目 'MyProject' 中找不到项目 'MyProject'

java - 如何从 Android (Java) 中的位图中读取元数据?

android - BrowseFragment 上的另一个行层

java - 我的自定义 Activity 中的谷歌地图

java - Android - 应用程序不断因错误而崩溃 - 我认为这与首选项 fragment 有关