首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SharedPreferences和TimePickerDialog

SharedPreferences和TimePickerDialog
EN

Stack Overflow用户
提问于 2012-03-21 12:23:39
回答 4查看 1.6K关注 0票数 0

万岁!

我正在尝试编写我的第一个Android应用程序,但我遇到了障碍。

我想让用户设置一个‘开始’和‘停止’的时间,为每日计划。我已经成功地实现了TimePickerDialog,以及它旁边的TextView,但我永远也想不出如何将用户选择的时间保存为SharedPreferences字符串。

代码如下(为清晰起见,请将其删减):

代码语言:javascript
复制
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.setup);
        // Retrieve the shared preferences
        mUserSettings = getSharedPreferences(USER_PREFERENCES, MODE_PRIVATE);

        // capture our View elements
        mTimeDisplayStart = (TextView)  findViewById(R.id.TextView_ScheduleStart_Info);
        mPickTimeStart = (Button) findViewById(R.id.Button_ScheduleStart);

        // add a click listener to the button
        mPickTimeStart.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                showDialog(TIME_DIALOG_START);
            }
        });

        // get the current time
        final Calendar c = Calendar.getInstance();
        mHourStart = c.get(Calendar.HOUR_OF_DAY);
        mMinuteStart = c.get(Calendar.MINUTE);

        // display the current date
        updateDisplayStart();
    }

    // updates the time we display in the TextView
    private void updateDisplayStart() {
        mTimeDisplayStart.setText(
                new StringBuilder()
                .append(padStart(mHourStart)).append(":")
                .append(padStart(mMinuteStart)));
    }

    private static String padStart(int c) {
        if (c >= 10)
            return String.valueOf(c);
        else
            return "0" + String.valueOf(c);
    }

    // the callback received when the user "sets" the time in the dialog
    private TimePickerDialog.OnTimeSetListener mTimeSetListenerStart =
        new TimePickerDialog.OnTimeSetListener() {
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                mHourStart = hourOfDay;
                mMinuteStart = minute;
                updateDisplayStart();
            }
        };

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case TIME_DIALOG_START:
            return new TimePickerDialog(this,
                    mTimeSetListenerStart, mHourStart, mMinuteStart, false);
        }
        return null;
    }

我假设应该在更新TextView的同时节省时间……但我不知道该怎么做。

我现在已经花了5到6个小时寻找答案,但我真的找不到一个。我已经用SharedPreferences.Editor进行了试验,但这不起作用,因为我需要将时间存储为一个长时间,而不是一个字符串。

我已经无能为力了,我真的很感谢你的帮助!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-21 12:38:26

你必须这样做

代码语言:javascript
复制
private TimePickerDialog.OnTimeSetListener mTimeSetListenerStart =
        new TimePickerDialog.OnTimeSetListener() {
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                mHourStart = hourOfDay;
                mMinuteStart = minute;
                updateDisplayStart();

                Calendar cal = Calendar.getInstance();
                cal.set(Calendar.HOUR_OF_DAY, hourOfDay);
                cal.set(Calendar.MINUTE, minute);
                mUserSettings.edit().putLong("starttime", cal.getTimeInMillis()).commit();

            }
        };
票数 1
EN

Stack Overflow用户

发布于 2012-03-21 12:35:06

在以下方法中

代码语言:javascript
复制
    // updates the time we display in the TextView
         private void updateDisplayStart() {
            mTimeDisplayStart.setText(
                    new StringBuilder()
                    .append(padStart(mHourStart)).append(":")
                    .append(padStart(mMinuteStart)));
        });

     SharedPreferences settingsActivity = getSharedPreferences("todolist1",
                    Activity.MODE_PRIVATE);
            SharedPreferences.Editor prefEditor = settingsActivity.edit();

            prefEditor.putString("DateToDisplay",new StringBuilder()
                    .append(padStart(mHourStart)).append(":")
                    .append(padStart(mMinuteStart));  // updates the time we display in the TextView



        prefEditor.commit();
}

在此之后,您希望从共享首选项中检索数据的位置如下

代码语言:javascript
复制
SharedPreferences settingsActivity = getSharedPreferences("todolist1",
                Activity.MODE_PRIVATE);

        if (settingsActivity.contains(DateToDisplay)) {
            String saveddate = settingsActivity
                    .getString(DateToDisplay, "");
票数 2
EN

Stack Overflow用户

发布于 2012-03-21 12:40:00

SharedPreferences支持long%s。您可以这样做

SharedPreferences prefs = getSharedPreferences("prefs", Context.MODE_PRIVATE); prefs.edit().putLong("longKey", longValue).commit();

来存储值。要检索它,您可以这样做

SharedPreferences prefs = getSharedPreferences("prefs", Context.MODE_PRIVATE); long longValue = prefs.getLong("longKey", 0l);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9798563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档