2011-02-03 42 views
3

對於我的應用程序,我有一套相當複雜的配置選項,用戶可以從中選擇。我目前使用PreferenceActivity作爲這些選項的用戶界面,並使用共享首選項存儲選項。由於一些設置一個例子,我必須適應:對實現複雜首選項屏幕的最佳方法?

  • 解釋:選擇背景圖案時,用戶可以選擇從1至5不同的形狀使用(其中每個形狀是.PNG文件)併爲每個形狀分配一個int顏色。例如,用戶可以選擇橙色正方形,綠色三角形和紅色矩形。

  • 分層數據:我的應用程序的一部分可以配置爲使用五種模式之一。每種模式都有一些相關的獨特設置,例如一種模式需要選擇兩個整數,另一種模式可能需要選擇一個布爾值。

然而,我的感覺是PreferenceActivity不會像上面,因爲設置很好地工作:

  • 共享偏好不能存儲列表。
  • 共享首選項不能存儲分層數據。
  • 將我的偏好界面沸騰到例如用於配置每種顏色以及使用相關首選項來禁用不適用於當前模式的首選項的個別首選項按鈕將導致混亂且難以使用的界面。

我可以編寫自己的Preference類來配置列表,但我發現這些實現比實現典型的View更加費力,而且我仍然需要處理存儲問題。

我的計劃是:

  • 只實現一個自定義GUI自定義活動。這給了我更多的自由來做一個好的界面來配置列表,並且我可以智能地隱藏不適用於當前模式的選項。
  • 將我的所有設置存儲在XML文件中或串行化Java對象。這意味着我可以輕鬆支持分層數據和可變長度列表,這爲進一步的擴展提供了空間。

這個計劃看起來是否合理?我擔心我沒有做Android的方式,但在我看來,共享首選項和PreferenceActivity不適合我的需求。

回答

1

自從我開始使用Android以來,我一直創建自己的偏好活動。這似乎很困難,因爲互聯網上沒有太多關於如何去做的文檔,但事實上,它確實非常簡單。正如你所說,它給你更多的自由來決定你的用戶界面的外觀和行爲。萬一你想知道如何自己做的喜好,這裏有一個簡單的小片段:

public class myprefs extends Activity{ 
private static final String PREFS_XML = "prefs_xml"; 
private static final String PREF_1 = "pref_1"; 

String preference; 

private SharedPreferences preferences = null; 
public void loadPrefs(){ 
    preferences = this.getSharedPreferences(PREFS_XML, Activity.MODE_PRIVATE); 
    preference = preferences.getString(PREF_1, "default value"); 
} 
} 

這幾乎是它是多麼簡單的讓你自己的喜好。要設置他們使用

preferences.edit().putString(PREF_1, "hello!").commit(); 

這可以放進一個onClick,onItemSelected,或其他任何「事件」你想要把它變成。我將'preferences'作爲一個類的實例,這樣我就可以在類中的任何地方訪問它,而無需重新實例化它。我希望這可以幫助你一點點。作爲具體問題的具體答案,我認爲你的計劃是完全合理的。

+0

感謝您的意見。我已經有了一些工作首選項屏幕,可以與一些自定義首選項部件一起工作,但是工作起來並且存在我提到的保存/加載和界面問題是一件非常麻煩的事情。我的計劃是去除你所擁有的,除非我會避免使用共享首選項來支持使用Java序列化。例如,我可以將東西放在ArrayList中並將其保存爲持久列表。 – rbcc 2011-02-04 00:03:26