日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

某android平板项目开发笔记--自定义sharepreference UI

發(fā)布時間:2025/1/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 某android平板项目开发笔记--自定义sharepreference UI 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前言

? android對于小數(shù)據(jù)的存儲,提供了一個很好的框架就是Sharepreference,但是,我們在做項目的時候會發(fā)現(xiàn),官方自帶的sharepreference 的UI 是遠遠滿足不了我們的需要(例如,設置備份時間等),這個時候,就需要我們定制一個sharepreference UI,上網(wǎng)找了一下,發(fā)現(xiàn),這方面的資料不多,不知道,是不是我用的關(guān)鍵字不對,導致,一直google 不出來…于是,我DEBUG 一下源碼, 把大致的方法給debug 出來…

1.從源代碼里面找線索之一

(1)官方的Sharepreference UI

從上圖可以看出,官方用于做sharepreference 的UI 就只有5個而已,遠遠不能滿足我們的需要,于是,我們就要想辦法定制一個.(注意:MultiSelectListPreference(api 11 以后才支持..))

(2) 定制一個Sharepreference UI

1,效果圖

2,怎么做?

首先,我們看一下實現(xiàn)的類圖:(從左往右)

(1)上面的例子是一個對話框交互的首選項設置,于是,我就繼承了DialogPreference,當然,如果只是開關(guān)設置的話,就請繼承TwoStatePreference,如果,這兩個,都滿足不了你的需要,你可以選擇直接繼承Preference.

?

(2) 接下來,我們就是定制我們的Preference UI

關(guān)于定制

1,你可以直接使用代碼

2,你可以寫布局文件

?

這里,我選擇寫一個布局文件,就是效果圖的那樣了…

然后在構(gòu)造方法中這樣寫:

public TimeSettingPreference(Context context, AttributeSet attrs) { super(context, attrs); setDialogLayoutResource(R.layout.preference_timesetting); }

?

接著,在sharepreference配置的xml 加上

<com.achai.shop.preferences.TimeSettingPreference android:key="@string/shop_infor_name" android:title="@string/shop_infor_name" />

這樣就完成了,對于sharepreference 自定義UI的配置.

2.從源代碼里面找線索 之二

? 只是,完成了一個UI是遠遠不夠的,我們還需要把我們設置的值,存進SharePreference這個框架里面!

? 以下內(nèi)容,可能比較啰嗦…

FAQ:

1, 我們怎么控制DialogPreference和我們一直用的AlertDialog控件的方法一樣嗎?

2, 怎么把值存進Sharepreference 里面?

?

(1),第一次啟動PreferenceActivity 流程圖

從上圖可知,我們啟動PreferenceActivity的時候,會初始化所有Preference UI,這就是為什么我們要把布局文件寫在構(gòu)造方法當中的原因.

(2) 調(diào)用過程

1,點擊我們的UI,將會調(diào)用如圖所示的方法

2,點擊確定或者取消以后,就會調(diào)用onDialogClosed,如下圖所示

與我們使用alertDialog 不同的是,DialogPreference 關(guān)閉的時候,統(tǒng)一調(diào)用onDialogClosed(boolean positiveResult)方法,確認還是取消,只要進行判斷即可.

x

至此,我們搞清楚了,這個Dialogpreference 整個運行流程,接下來得問題是,怎么綁定我們的控件呢?

onCreateDialog() || onBindDialogView(View view) ?

如果,你的控件是寫在xml 里面當中的,你就只能用onBindDialogView,一般而言我們不重寫onCreateDialog()…

總結(jié):

如果,你用的是DialogPreference,僅僅能用你至少需要重寫:

  • onBindDialogView(View view)
  • onDialogClosed(boolean posittiveResult)

?

為了你的程序?qū)懙酶?你除了重寫以上方法以外還需要重寫

  • onSetInitialValue(boolean restoreValue, Object defaultValue)
  • onSaveInstanceState()
  • onRestoreInstanceState(Parcelable)

接下來,我們就要把我們的值,存進Sharepreference里面

3.從源代碼里面找線索 之三

? 這部分內(nèi)容,就要把我們的值存到sharepreference里面,其實很簡單..

1,在onDialogClosed 寫好要保存的方式

@Override protected void onDialogClosed(boolean positiveResult) { // TODO Auto-generated method stub super.onDialogClosed(positiveResult); if (positiveResult) { setTime(); } }

2,寫我們的setTime()方法即可..

private void setTime() { // shopStart.gett @SuppressWarnings("unused") //檢查是否需要關(guān)閉依賴... final boolean wasBlocking = shouldDisableDependents(); int currentHour = shopStart.getCurrentHour(); int currentMinute = shopStart.getCurrentMinute(); //持久化值 persistString(currentHour+":"+currentMinute); //再次檢查是否需要關(guān)閉依賴... final boolean isBlocking = shouldDisableDependents(); //更新所有依賴改變 if(isBlocking != wasBlocking) { notifyDependencyChange(isBlocking); } }

?

截個小圖來表示一下:

順便給個建議,如果上網(wǎng)找不到資料的話,直接debug 源碼,從源碼中找出規(guī)律不失為一個好辦法..

轉(zhuǎn)載于:https://blog.51cto.com/youxilua/794733

總結(jié)

以上是生活随笔為你收集整理的某android平板项目开发笔记--自定义sharepreference UI的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。