2017-05-26 10 views
1

以下のコードは、私のWindows phoneアプリ用に書いた設定クラスです。非常に使いやすいです:設定を作成するアンドロイドプロジェクト全体で使用できるクラス

using System; 
using System.IO.IsolatedStorage; 
using System.Diagnostics; 

namespace myAppName 
{ 
    public class AppSettings 
    { 

    // Our isolated storage settings 
    IsolatedStorageSettings settings; 

    // The isolated storage key names of our settings 
    const string InstalledonSettingKeyName = "InstalledonSetting"; 
    const string SeenTutorialSettingKeyName = "SeenTutorialSetting"; 
    const string FontSizeSettingKeyName = "FontSizeSetting"; 
    const string FontTypeSettingKeyName = "FontTypeSetting"; 

    // The default value of our settings 
    const long InstalledonSettingDefault = 0; 
    const bool SeenTutorialSettingDefault = false; 
    const int FontSizeSettingDefault = 30; 
    const string FontTypeSettingDefault = ""; 

    /// <summary> 
    /// Constructor that gets the application settings. 
    /// </summary> 
    public AppSettings() 
    { 
     try 
     { 
      // Get the settings for this application. 
      settings = IsolatedStorageSettings.ApplicationSettings; 

     } 
     catch (Exception e) 
     { 
      Debug.WriteLine("Exception while using IsolatedStorageSettings: " + e.ToString()); 
     } 
    } 

    /// <summary> 
    /// Update a setting value for our application. If the setting does not 
    /// exist, then add the setting. 
    /// </summary> 
    /// <param name="Key"></param> 
    /// <param name="value"></param> 
    /// <returns></returns> 
    public bool AddOrUpdateValue(string Key, Object value) 
    { 
     bool valueChanged = false; 

     // If the key exists 
     if (settings.Contains(Key)) 
     { 
      // If the value has changed 
      if (settings[Key] != value) 
      { 
       // Store the new value 
       settings[Key] = value; 
       valueChanged = true; 
      } 
     } 
     // Otherwise create the key. 
     else 
     { 
      settings.Add(Key, value); 
      valueChanged = true; 
     } 

     return valueChanged; 
    } 


    /// <summary> 
    /// Get the current value of the setting, or if it is not found, set the 
    /// setting to the default setting. 
    /// </summary> 
    /// <typeparam name="valueType"></typeparam> 
    /// <param name="Key"></param> 
    /// <param name="defaultValue"></param> 
    /// <returns></returns> 
    public valueType GetValueOrDefault<valueType>(string Key, valueType defaultValue) 
    { 
     valueType value; 

     // If the key exists, retrieve the value. 
     if (settings.Contains(Key)) 
     { 
      value = (valueType)settings[Key]; 
     } 
     // Otherwise, use the default value. 
     else 
     { 
      value = defaultValue; 
     } 

     return value; 
    } 


    /// <summary> 
    /// Save the settings. 
    /// </summary> 
    public void Save() 
    { 
     settings.Save(); 
    } 

    public long InstalledonSetting 
    { 
     get 
     { 
      return GetValueOrDefault<long>(InstalledonSettingKeyName, InstalledonSettingDefault); 
     } 
     set 
     { 
      if (AddOrUpdateValue(InstalledonSettingKeyName, value)) 
      { 
       Save(); 
      } 
     } 
    } 

    public int FontSizeSetting 
    { 
     get 
     { 
      return GetValueOrDefault<int>(FontSizeSettingKeyName, FontSizeSettingDefault); 
     } 
     set 
     { 
      if (AddOrUpdateValue(FontSizeSettingKeyName, value)) 
      { 
       Save(); 
      } 
     } 
    } 

    public string FontTypeSetting 
    { 
     get 
     { 
      return GetValueOrDefault<string>(FontTypeSettingKeyName, FontTypeSettingDefault); 
     } 
     set 
     { 
      if (AddOrUpdateValue(FontTypeSettingKeyName, value)) 
      { 
       Save(); 
      } 
     } 
    } 

    public bool SeenTutorialSetting 
    { 
     get 
     { 
      return GetValueOrDefault<bool>(SeenTutorialSettingKeyName, SeenTutorialSettingDefault); 
     } 
     set 
     { 
      if (AddOrUpdateValue(SeenTutorialSettingKeyName, value)) 
      { 
       Save(); 
      } 
     } 
    } 
} 

}

今、このクラスを使用すると、別のクラスに

はかなり簡単です。今、この

namespace myAppName 
{ 
    public partial class MyActivity : PhoneApplicationPage 
    { 
     private AppSettings settings = new AppSettings(); 
     public MyActivity() 
     { 
      InitializeComponent(); 

      if (!settings.SeenTutorialSetting) ShowTutorial(); 
     } 

}

私のように私はAndroidのJavaクラスで同じことをすることができますか:

package com.example.myappname; 

public class AppSettings{ 
String InstalledonSettingKeyName = "InstalledonSetting"; 
String SeenTutorialSettingKeyName = "SeenTutorialSetting"; 
String FontSizeSettingKeyName = "FontSizeSetting"; 
String FontTypeSettingKeyName = "FontTypeSetting"; 

// The default value of our settings 
ong InstalledonSettingDefault = 0; 
bool SeenTutorialSettingDefault = false; 
int FontSizeSettingDefault = 30; 
String FontTypeSettingDefault = ""; 

public AppSettings(){} 

私はこれやって好まない:

if (!PreferenceManager.getDefaultSharedPreferences(this).getBoolean("myapp_finished_loading", false)) 
{ 
} 

かさえ、この:

SharedPreferences vSettings = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
long used_time_l = System.currentTimeMillis() - vSettings.getLong("myapp_first_data", 0); 

限り継承は、AndroidのJavaクラスに懸念しているすべてのヘルプははるかに高く評価されるだろうさ。あなたがdownvoteする必要がある場合私に理由を教えてください。

+0

**を使用することができます** Bundles **、** Parcelables **、** SharedPreferences **は、**フラグメント**と**アクティビティ**の間でデータをどのように共有するのか、常に中心的な役割を果たします。試してみてください** SharedPreferencesが**可変ストレージ**のコンセプトを提供しようとしているので**これをやってみましょう。また、生のファイルI/Oコードを書くのに費やす時間を節約しながら – ShayHaned

+0

これをあなたのサポートに感謝します – Oyonde

答えて

2

あなたはので、一度に設定を初期化オブジェクトを作成し、私はそのdownvotedなっ発見した場合でも、私は個人的にこの質問をupvoteだろう、なぜ**私に知らせてdownvoteしなければならない場合は、後で

class Settings { 

public static String PARAM_PARAM1 = "param1"; 
public static String PARAM_PARAM2 = "param2"; 

private static String DEFAULT_PARAM1 = "hello"; 
private static boolean DEFAULT_PARAM2 = false; 

private SharedPreferences prefs; 

public Settings(Context ctx){ 
    prefs = PreferenceManager.getDefaultSharedPreferences(ctx); 
} 

public String getParam1(){ 
    return prefs.getString(PARAM_PARAM1, DEFAULT_PARAM1); 
} 

public void setParam1(String param1){ 
    prefs.edit() 
      .putString(PARAM_PARAM1, param1) 
      .apply(); 
} 

public boolean getParam2(){ 
    return prefs.getBoolean(PARAM_PARAM1, DEFAULT_PARAM2); 
} 

public void setParam2(boolean param2){ 
    prefs.edit() 
      .putBoolean(PARAM_PARAM2, param2) 
      .apply(); 
} 
} 
+0

それを試してみる – Oyonde

関連する問題