【问题标题】:Android application remember settingsAndroid 应用程序记住设置
【发布时间】:2014-02-01 03:06:10
【问题描述】:

我正在使用 Xamarin 进行编码,并且对应用程序设置有疑问。

是否可以进行应用程序范围的设置?我举个例子:

我有一个地图应用程序。我有一个 ListView,用户可以在其中选择地图是使用街景、卫星视图还是默认视图。

取决于在 ListView 中选择的项目取决于显示的地图视图。

我可以在哪里以及如何保存此选择,以便该值在整个应用程序中可见,并且当用户退出应用程序时,可以在用户再次启动应用程序时记住此设置?

提前致谢

【问题讨论】:

标签: android google-maps xamarin remember-me appsettings


【解决方案1】:

是的,这是可能的,也很容易。通常您使用SharedPreferences 保存简单的应用程序设置。可以从应用中的任何位置读取它们。

写作。

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
Editor editor = sp.edit();
editor.putBoolean("someBoolean", true);
editor.putString("someString", "string");
editor.commit();

阅读

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
boolean someBoolean = sp.getBoolean("someBoolean", false);
boolean someString = sp.getString("someString", null);

【讨论】:

  • 我可以使用 SharedPreferences 保存对象吗?
  • @garry 不,你不能 SharedPreferences 只能存储 key/value 对。
  • @Garry 好吧,您可以将对象转换为 JSON 字符串,然后保存该字符串,尽管这可能不是一个好方法。
【解决方案2】:

我想您应该熟悉 Java I/O 和 android 的基本概念。所以我来了:

对于 Android 中的数据持久性,您有两个主要解决方案:

  • SQLite 数据库
  • 文件系统

我建议您使用文件系统,因为您实际上并不需要使用关系约束来组织数据,而且您可能不必使大量数据持久化。

Android 文档对如何保存文件非常清楚: http://developer.android.com/training/basics/data-storage/files.html

我建议你创建一个包含 HashMap 属性的 Setting 类:

public class Settings implements Parcelable{
    public static HashMap<String,String> settings;

    public static void readSettings(){
        //Here you read your settings file and you fill your hashmap
    }

    public static void writeSettings(){
        //Here you iterate through your hashmap and you write your setting files
    }
}

每个活动都可以访问设置,因为属性/方法是静态的。设置也将在每个活动中同步(如果您在一个活动中更改设置,其他活动都会注意到)。

如果您需要澄清,请在下方留言。

【讨论】:

  • SharedPreferences 更简单,更适合这种情况。
  • 你说得对!在这种情况下,使用此自定义方法来跟踪设置可能毫无价值且更复杂。但在某些情况下,能够将对象序列化到设置文件中可能会很方便。使用 SharedPreferences,您需要一个外部库来执行此操作(GSon)。但最后,你有最有用的答案,我给你!
  • 文件方法的优点是代码可以跨平台工作,因此您可以将它与应用程序的 iOS 和 WP8 版本以及 Android 版本一起使用。使用 Json.NET 或 ServiceStack.Text 之类的东西将对象序列化为文件(无需在其中实现 Parcelable 或任何其他平台特定的基础)。
  • @Skall 我没有想到这一点,这是真的。我个人总是更喜欢尽可能独立于平台,所以当我想使用多个平台时不需要更改很多代码。这就是我建议这种方法的原因!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
相关资源
最近更新 更多