2011-03-09 28 views
5

PreferencesActivity, onay kutularını içeren bir preferences.xml gösterir. Android Tercihler anahtarlarından tercihler.xml

preferences.xml

:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
<PreferenceCategory android:title="Keywords"> 
    <CheckBoxPreference android:key="Essen" 
         android:title="Essen" 
         android:selectable="true" 
         android:enabled="true" 
         android:persistent="false"> 
    </CheckBoxPreference> 
    <CheckBoxPreference android:key="Kleidung" 
         android:title="Kleidung" 
         android:selectable="true" 
         android:enabled="true" 
         android:persistent="false"> 
    </CheckBoxPreference> 
</PreferenceCategory> 
</PreferenceScreen> 

PreferencesActivity:

public class PreferencesViewController extends PreferenceActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 
} 

Şimdi farklı bir ListActivity yılında tüm Keys göstermek istiyorum/işaretlenmiş onay kutularına gelen Başlıklar.

Ben

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

veya

SharedPreferences prefs = getSharedPreferences("mypackage_preferences", 0); 

ile Tercihler erişmeye çalıştığınızda Ama her ikisi gerçekten işe Yüklü. Ben prefs.getAll().size() çağırdığınızda

sonuç 0.

Ben getPreferenceScreen().getPreference(i).… ile Tuşlar/Başlık erişebilir ama sadece PreferenceActivity den farklı bir Activity gelen çalışmaz.

Bu çalışmanın nasıl yapıldığına dair bir çözümü olan var mı?

cevap

0

Ben

SharedPreferences prefs = 
    PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

kullanmak Sonra mesela prefs.get...() aracılığıyla tercihlerini erişebilir prefs.getString(key). Bunu denediniz mi?

Düzenleme: Hemen teslim - beklendiği gibi prefs.getAll() işler ve tüm tercihleri ​​ile bir Map döndürür.

+0

http://developer.android.com/guide/topics/ui/settings.html "Varsayılan Değerlerini Ayarlama" paragrafında bulunabilir. – liquid

+0

Sorun şu ki, bu tercihleri ​​Internet/Server'dan güncellemek istiyorum. Bu yüzden her onay kutusunun anahtarlarını bilmiyorum. Bu yüzden Tercihler bir Etkinlik/Görünümde gösterilmelidir, Kullanıcı bunları kontrol edebilir/işaretini kaldırabilir. Kontrol edilen tercihleri ​​okumalı ve tercihler bir sunucu tarafından güncellenmelidir… Belki PreferenceActivity doğru çözüm değil mi ?! : -/ – liquid

0

Sen PreferencesActivity aracılığıyla bunları asla varsa tercihleri ​​boş olabilir

SharedPreferences prefs = referenceManager.getDefaultSharedPreferences(this); 

kullanmalıdır. Ayrıca ListActivity'inizin PreferencesActivity ile aynı pakette olması gerektiğini düşünüyorum.

3

Bunu yapmak için PreferenceActivity'a ihtiyacınız yoktur.

verilerin listeniz sunucudan geliyorsa sen görselleştirmek için bir ListActivity/ExpandableListActivity/herhangi bir özel etkinliği kullanabilirsiniz daha sen

SharedPreferences prefs = 
    PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

kullanmalıdır, sizin PreferenceActivity kullanılan tercihlerini erişmek için Bu, ancak bu şekilde tercihleri ​​değiştiren işleyicileri yazmanız gerekiyor.

bu olurdu yapmak için yaygın yolu: Eğer gerekiyorsa

private void saveStringPreference(final String key, final String value) 
{ 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putString(key, value); 
    editor.commit(); 
} 

, sen int, boolean vb değerleri ile başa çıkmak için benzer sarmalayıcılarını oluşturmalıdır.

+1

Teşekkürler. Bu cevabı yaklaşık bir saat boyunca araştırıyorum. Tercihlerim.xml ve preferences.java vardı ama değerleri ayarlamak için başka bir ekran kullanmak istedim. Tekrar teşekkürler. – EGHDK

+0

Neden getBaseContext() '? –

+0

Sanırım asla bilemeyeceğiz – Denny

1

Ben de bu problemi yaşadım. Bu klasik bir RTFM, ne yazık ki.Eğer MainActivity en onCreate() yönteminde aşağıdaki satırı koymalıyız:

PreferenceManager.setDefaultValues(this, R.xml.preferences, false); 

Bu bilgi Zaten bu denenmiş

İlgili konular