我正在制作一个动态壁纸,我需要在设置场景中改变车辆的速度,当我按下返回按钮时,它需要反映回壁纸服务.在我的偏好活动中,我将列表偏好更改保存在共享偏好中,如下所示:-
I am making a live wallpaper where i need to change the speed of a vehicle in setting scene and it needs to get reflected back to the wallpaper service when i press the return button. In my preference activity, i save the list preference changes in shared preferences like this :-
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.prefs); ListPreference listPreference = (ListPreference) findPreference("listPref"); currValue = listPreference.getValue(); Log.e("LiveWallpaperSettings", "currvalue " + currValue); listPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference arg0, Object arg1) { SharedPreferences customSharedPreference = getSharedPreferences("Speed", LiveWallpaperSettings.MODE_PRIVATE); SharedPreferences.Editor editor = customSharedPreference.edit(); editor.putString("Speed",currValue); editormit(); return true; } });我的壁纸服务是使用 andengine livewallpaper 扩展制作的.如果我想在服务中反映我的列表首选项中的更改,我该怎么做.这就是我所做的,但它似乎不起作用.
My wallpaper service is made using andengine livewallpaper extension. If i want to reflect the changes in my list preference in the service, how do i do that. This is what i did but it doesn't seem to be working.
我的 prefs.xml
My prefs.xml
<PreferenceCategory android:title="Settings"> <ListPreference android:title="Speed" android:summary="Change the Speed" android:key="listPref" android:defaultValue="15" android:entries="@array/listArray" android:entryValues="@array/listValues" /> </PreferenceCategory>我的array.xml
My array.xml
<resources> <string-array name = "listArray"> <item>Slow</item> <item>Medium</item> <item>Fast</item> </string-array> <string-array name = "listValues"> <item>5</item> <item>15</item> <item>30</item> </string-array>在我的服务中,我实现了 SharedPreferences.OnSharedPreferenceChangeListener 并实现了以下方法
In my service i implement SharedPreferences.OnSharedPreferenceChangeListener and implement the following method
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) { sharedPreferences = getSharedPreferences("Speed", MODE_PRIVATE); strSpeedValue = sharedPreferences.getString("Speed", "5"); fltSpeedValue = Integer.parseInt(strSpeedValue); final AutoParallaxBackground autoParallaxBackground = new AutoParallaxBackground(0, 0, 0, 10); autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(fltSpeedValue, new Sprite(0,mCamera.getHeight() - this.mParallaxLayer.getHeight(),this.mParallaxLayer, getVertexBufferObjectManager()))); autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(0f, new Sprite(CAMERA_WIDTH/2 - 30, CAMERA_HEIGHT/2,this.mAutoLayer, getVertexBufferObjectManager()))); mMainScene.setBackground(autoParallaxBackground); } @Override protected void onResume() { super.onResume(); // Set up a listener whenever a key changes PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); // Unregister the listener whenever a key changes PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this); }但是我在 listpreference 中更改的值在我的服务中没有更改.我做错了什么吗?
But the value that i am changing in my listpreference does not get changed in my service. Am i doing something wrong?
推荐答案已解决!
我在 PreferenceActivity 中错误地设置了值,并且我没有正确实现 OnSharedPreferenceChangeListener.
I was setting values incorrectly in my PreferenceActivity and i didn't implemement OnSharedPreferenceChangeListener properly.
解决方案:-
ListPreference listPreference; @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.prefs); listPreference = (ListPreference) findPreference("listPref"); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { SharedPreferences customSharedPreference = getSharedPreferences(key, LiveWallpaperSettings.MODE_PRIVATE); SharedPreferences.Editor editor = customSharedPreference.edit(); editor.putString("Speed",listPreference.getValue()); editormit(); Log.e("LiveWallpaperSettings", "Speed Value after setting " + customSharedPreference.getString("Speed", "")); } @Override protected void onResume() { super.onResume(); // Set up a listener whenever a key changes getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); // Unregister the listener whenever a key changes getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); }更多推荐
SharedPreference 更改未反映在我的墙纸服务中
发布评论