保存小部件状态

时间:2010-10-25 03:42:59

标签: android android-widget

该文件 http://developer.android.com/guide/topics/data/data-storage.html

显示有多种方法可以保存数据,我需要在一个小部件中执行此操作,每次我尝试保存时都会出现错误...

例如

      SharedPreferences settings = getSharedPreferences("NAME", 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putBoolean("silentMode", false);

      // Commit the edits!
      editor.commit();

错误

Description Resource    Path    Location    Type
The method getSharedPreferences(String, int) is undefined for the type AWidget

另一次尝试:

     String FILENAME = "hello_file";
     String string = "hello world!";

     FileOutputStream fos = openFileOutput("Test.txt", Context.MODE_PRIVATE);
     fos.write(string.getBytes());
     fos.close();

有错误

Description Resource    Path    Location    Type
The method openFileOutput(String, int) is undefined for the type AWidget

这笔交易是什么?我看到没有提到这在小部件中不起作用,为什么这些例子对我不起作用?

保存此数据的首选方法是什么?

2 个答案:

答案 0 :(得分:2)

所以问题是我不能只使用这个函数,如果我用上下文做的话,上面的代码就可以正常工作了。在它面前...

 SharedPreferences settings = context.getSharedPreferences("NAME", 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putBoolean("silentMode", false);

      // Commit the edits!
      editor.commit();

因此,您可以看到获取共享首选项所需的全部内容......以及此...

int [] allids = AppWidgetManager         .getInstance(上下文)         .getAppWidgetIds(new ComponentName(context,AwarenessWidget.class));

我可以获取应用的所有ID并调用onupdate并根据保存的首选项更新每个视图

如果有人需要,我可以详细说明......

Baffels me没有人能够找到那个并帮助我!现在看起来很直接!

答案 1 :(得分:1)

我认为如果你想保存关于特定小部件的状态,最好使用View框架中内置的已保存状态机制。 SharedPreferences对应用程序来说是全局的。因此,如果你有两个AWidget实例,那么在运行时很难区分两者。

相反,您可能希望覆盖:

onRestoreInstanceState(Parcelable state)

的onSaveInstanceState()

如果为View启用了保存,Android应该调用onSaveInstanceState(),其中您的窗口小部件将有机会返回一个Parcelable,稍后它可以在onRestoreInstanceState()中继续使用,以恢复它的起始位置。