【问题标题】:Create Settings Class that can be used in entire android project创建可以在整个android项目中使用的设置类
【发布时间】:2017-05-26 14:08:39
【问题描述】:

下面的代码是我为我的 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类中的继承而言,任何帮助都将不胜感激。如果您必须投反对票,请告诉我原因。

【问题讨论】:

  • 如果您必须投票,请告诉我原因,即使我发现这个问题被否决了,我也会亲自投票赞成,因为 Bundles,Parcelables、SharedPreferences 在您如何在 fragmentsactivities之间共享数据方面始终发挥核心作用>。尝试喜欢这样做,因为 SharedPreferences 试图提供可变存储的概念,同时还可以节省您编写原始文件 I/O 代码所花费的时间
  • 感谢您对此的支持

标签: java c# android class inheritance


【解决方案1】:

您可以在创建对象时初始化一次首选项,然后再使用它

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();
}
}

【讨论】:

  • 我去试试
猜你喜欢
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多