2012-02-17 22 views
5

Android için ilk canlı duvar kağıdımı yayınladım. Telefonumda ve birkaç arkadaş telefonumda herhangi bir sorun bulamadan test ettim, ancak bazı cihazlarda görünüşe göre özyinelemeli bir döngüde sıkışıyor ve kullanıcı ayarları değiştirmeye çalıştığında bir yığın taşması hatasına neden oluyor.onSharedPreferenceChanged, bazı Android cihazlarda yığın taşmasına neden oluyor

Sorunun ortaya çıktığına inanıyorum çünkü bazı kalıcı değerleri değiştirmem gereken belirli "tema" ayarlarına sahibim. Örneğin, bir tema varsayılan renk, hız, arkaplan vb. Ayarlar. Görünüşe bakılırsa, bu değerleri program aracılığıyla Editor.commit() ile sürdürdüğümde, yine de "PaylaşılanPreferenceChanged", tekrar tekrar ve tekrarlanır ...

Bu canlı bir duvar kağıdı, şeffaf tercih ekranının arkasında çalışan bir önizleme var ve ayarları yapıldıkları gibi yansıtacak şekilde buna ihtiyacım var. Ayrıca, hem doğrudan kullanıcı tarafından yapılan değişiklikleri, hem de bir "tema" seçildiğinde programatik olarak yansıtmak için kaydırıcılara/renk toplayıcılarına/liste tercihlerine de ihtiyacım var. Bunu yapmanın en kolay yolu onSharedPreferenceChanged içinde bir tercih editörü ile değiştirmek gibi görünüyordu, ve aslında, bu birçok cihaz üzerinde çalışır.

Tüm aygıtlarda çalışmasını sağlamak için ne yapabilirim?

İlgili kod İşte:

public void onSharedPreferenceChanged(SharedPreferences prefs, String key) 
{ 


    if(key != null) 
    { 

    SharedPreferences.Editor editor = prefs.edit(); 

    hue = prefs.getInt("color", 0); 
    BG_COLOR = prefs.getInt("background_color", 0); 

//etc... 



    if(key.matches("plasma_set")) 
    { 

     plasmaAtlasName = atlasName; 
     editor.putString("atlasName", atlasName); 

     //load each bolt set with defalut values 

     if(plasmaAtlasName.equals("plasmaAtlas11")) 
     { 
      hue = 180; 
      editor.putInt("speed", 10); 
      editor.putInt("bolt_density", 2); 
      BG_COLOR = 0; 
      editor.putInt("background_color", BG_COLOR); 
      editor.putInt("color", hue); 
     } 

     if(plasmaAtlasName.equals("plasmaAtlas9")) 
     { 
      hue = 330; 
      editor.putInt("speed", 10); 
      editor.putInt("bolt_density", 2); 
      BG_COLOR = 0; 
      editor.putInt("background_color", BG_COLOR); 
      editor.putInt("color", hue); 

     } 

    //etc... 
} 

editor.commit(); 
} 
} 

cevap

3

Tamam, bunu anladım. Editor.commit() 'i çağırmadan önce dinleyicinin kaydını tutmak ve sonra tekrar kaydettirmek basit bir meseleydi.

+0

Bir örnek verebilir misiniz? – nAkhmedov

İlgili konular