中国移动互联网研发培训专家我们都知道,一般人身高的变化程度,比起体重的变化程度小的多。因此就设计一款BMI计算程序来说,如果能在使用者第一次输入身高体重值后,程序能帮我们预先记住上次输入过的身高,那麽等到下次启动程序时,便只需要输入体重。这麽一来,减少了使用者重複输入的麻烦,在使用上就更方便了。使用者应该会喜欢这个便利的功能吧。中国移动互联网研发培训专家打开src/com/demo/android/bmi/Bmi.java,在onCreate和onStop中加入Preference(偏好设定)相关的程序码。完整的程序码如下:代码:ublicclassBmiextendsActivity{privatestaticfinalStringTAG=Bmi;publicstaticfinalStringPREF=BMI_PREF;publicstaticfinalStringPREF_HEIGHT=BMI_Height;中国移动互联网研发培训专家/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(Bundleicicle){super.onCreate(icicle);setContentView(R.layout.main);findViews();restorePrefs();setListensers();}中国移动互联网研发培训专家//RestorepreferencesprivatevoidrestorePrefs(){SharedPreferencessettings=getSharedPreferences(PREF,0);Stringpref_height=settings.getString(PREF_HEIGHT,);中国移动互联网研发培训专家if(!.equals(pref_height)){field_height.setText(pref_height);field_weight.requestFocus();}}......@Override中国移动互联网研发培训专家protectedvoidonStop(){super.onStop();//Saveuserpreferences.useEditorobjecttomakechanges.SharedPreferencessettings=getSharedPreferences(PREF,0);settings.edit().putString(PREF_HEIGHT,field_height.getText().toString()).commit();}中国移动互联网研发培训专家代码://RestorepreferencesprivatevoidrestorePrefs(){SharedPreferencessettings=getSharedPreferences(PREF,0);Stringpref_height=settings.getString(PREF_HEIGHT,);中国移动互联网研发培训专家if(!.equals(pref_height)){field_height.setText(pref_height);field_weight.requestFocus();}}我们在onCreate函式中,加入一行restorePrefs呼叫。并在onCreate函式外,再定义一个restorePrefs函式如上。中国移动互联网研发培训专家代码:SharedPreferencessettings=getSharedPreferences(PREF,0);我们宣告了一个偏好设定(SharedPreferences)型别settings,并使用getSharedPreferences函式,来寻找系统中有无符合以BMI_PREF字串(PREF参数)作为档名的偏好设定档。如果有符合条件的偏好设定档存在的话,就将这个偏好设定指定使用settings作为代号来操作。如果没有的话,getSharedPreferences函式会回传0给settings。中国移动互联网研发培训专家代码:Stringpref_height=settings.getString(PREF_HEIGHT,);我们可以透过getXXX函式,来从偏好设定(SharedPreferences)读取不同型别的内容。例如本例中使用getString来读取文字类型的信息。当PREF_HEIGHT偏好设定参数存在时,字串pref_height就会得到偏好设定参数的内容。如果不存在PREF_HEIGHT这个偏好设定参数时,字串pref_height则会得到一个空字串。中国移动互联网研发培训专家代码:if(!.equals(pref_height)){pref_height.setText(pref_height);...}当pref_height字串存在时,我们将field_height栏位内容设定成偏好设定参数中取出的值。中国移动互联网研发培训专家代码:field_weight.requestFocus();同时,因为身高栏位已经预先填好了,使用者只需要再填入体重值即可开始计算自己的BMI值。但是当程序一执行,预设的焦点栏位(游标)还是停在身高栏位上。因此我们可以在field_weight栏位识别符号上,使用requestFocus函式,来手动将焦点栏位改到体重栏位上。这样当使用者要输入时,如果之前已经输入过身高,那麽程序就会自动帮忙填好上次输入的身高,并把焦点栏位设置到体重栏位上,使用者只需直接输入体重数字就可以了。中国移动互联网研发培训专家如果只加入了取得偏好设定这段的程序码,就运行模拟器来看看结果,会发现我们写在restorePrefs函式中的程序码,目前都还没有发生作用。这是因为我们尚未在程序中储存任何偏好设定。接着,我们将在程序中加入储存偏好设定的程序码,好能在开启Activity时读到偏好设定。中国移动互联网研发培训专家代码:@OverrideprotectedvoidonStop(){super.onStop();//Saveuserpreferences.useEditorobjecttomakechanges.SharedPreferencessettings=getSharedPreferences(PREF,0);中国移动互联网研发培训专家settings.edit().putString(PREF_HEIGHT,field_height.getText().toString()).commit();}当我们使用Home、Back按钮或其他方式离开当前的Activity时,我们才把身高的值储存到偏好设定中。根据上一章活动的生命週期,我们知道离开当前萤幕的最后一个状态是Stop状态。因此我们覆载(Override)了onStop函式,在其中加入储存身高偏好设定的程序码。super.onStop的作用是先将原本的onStop函式执行一遍。中国移动互联网研发培训专家代码:SharedPreferencessettings=getSharedPreferences(PREF,0);我们宣告了一个偏好设定(SharedPreferences)型别settings,并使用getSharedPreferences函式,来寻找系统中有无符合以BMI_PREF字串(PREF参数)作为档名的偏好设定档。如果有符合条件的偏好设定档存在的话,就将这个偏好设定指定使用settings作为代号来操作。如果没有的话,getSharedPreferences函式会回传0给settings。中国移动互联网研发培训专家代码:settings.edit().putString(PREF_HEIGHT,field_height.getText().toString()).commit();在此我们串接了三个settings拥有的函式:edit、putString,和commit。要改变偏好设定(SharedPreferences)型别的内容,需要透过edit函式来编辑。编辑结束后,要透过commit函式来将改变写到系统中。我们可以透过putXXX函式来为偏好设定(SharedPreferences)填入不同型别的内容。例如本例中使用putString来写入文字类型的信息(读者也可以试试用putInt或putFloat函式来直接将身高值储存成整数或浮点数)。中国移动互联网研发培训专家本例中putString函式所执行的动作,是透过field_height界面元件识别符号来取得身高的字串后,将字串储存到PREF_HEIGHT所代表的偏好设定参数中。