该文件 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
这笔交易是什么?我看到没有提到这在小部件中不起作用,为什么这些例子对我不起作用?
保存此数据的首选方法是什么?
答案 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()中继续使用,以恢复它的起始位置。