2012-07-24 184 views
0

我試圖以編程方式從SharedPreferences列表視圖中刪除其中一個選項。我已在下面包含簡化代碼。從SharedPreferences刪除ListView選項

我已閱讀了大量類似的問題,但它似乎不適用於我。我必須誤解一個關鍵概念。請幫忙。

我嘗試過使用clear()和apply()。我也嘗試添加一行,而不是刪除所有沒有成功。

我想我可能會誤解使用哪個鍵的概念,並嘗試過交替,但似乎沒有任何工作。

我preferences.java

package il.preferences; 

import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.preference.PreferenceActivity; 

public class Preferences extends PreferenceActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
     SharedPreferences preferences = getSharedPreferences(
       "myKey", MODE_PRIVATE); 
     preferences.edit().remove("1").commit(); 
    } 
} 

我preference.xml

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 

    <PreferenceCategory android:title="Cat X" > 
     <ListPreference 
      android:defaultValue="1" 
      android:entries="@array/myOptions" 
      android:entryValues="@array/myValues" 
      android:key="myKey" 
      android:summary="Select an item" 
      android:title="Choose" /> 
    </PreferenceCategory> 

</PreferenceScreen> 

我的strings.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<resources> 
    <string-array name="myOptions"> 
     <item>A</item> 
     <item>B</item> 
     <item>C</item> 
    </string-array> 
    <string-array name="myValues"> 
     <item>1</item> 
     <item>2</item> 
     <item>3</item> 
    </string-array> 
</resources> 

回答

0

我的問題是,我概念化偏好框架錯誤的。我會分享我的錯誤回合來幫助其他失去的新手。

我對我在上面的preferences.xml中定義的PreferenceScreen和存儲首選項的文件感到困惑,它可以在DDMS透視圖中看到my.package.name_preferences.xml - 使用文件管理器 - data - data - 項目名稱 - shared_prefs找到並拉這個文件

<?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
<map> 
<string name="myKey">1</string> 
</map> 

我然後錯誤地着手嘗試使用首選項編輯器來改變PreferenceScreen

SharedPreferences preferences = getSharedPreferences("myKey", MODE_PRIVATE); 
preferences.edit().remove("1").commit(); 

最後我終於找到示例代碼在谷歌的API com.example.android.apis.ApiDemos com/example/android/apis/preference 其中有我需要的所有排列,以便最終理解。

我最終的解決方案是使用 setPreferenceScreen(createPreferenceHierarchy())的組合; addPreferencesFromResource(R.xml.preferences);

合併我的靜態和動態偏好。我的動態偏好代碼我在下面添加,但是(感謝谷歌)。我建議看看谷歌API,而不是試圖在網上找到教程或使用書籍。

import java.util.List; 
import android.os.Bundle; 
import android.preference.ListPreference; 
import android.preference.PreferenceActivity; 
import android.preference.PreferenceCategory; 
import android.preference.PreferenceScreen; 

public class SetPreferenceActivityGB extends PreferenceActivity { 
    private static final String LENGTH_DEFAULT = "4"; 
    private static final String LEVEL_DEFAULT = "level1"; 

    @SuppressWarnings("deprecation") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setPreferenceScreen(createPreferenceHierarchy()); 
     addPreferencesFromResource(R.xml.preferences); 
    } 


    private PreferenceScreen createPreferenceHierarchy() { 
     PreferenceScreen root = getPreferenceManager().createPreferenceScreen(
       this); 


     // Dialog based preferences 
     PreferenceCategory dialogBasedPrefCat = new PreferenceCategory(this); 
     root.addPreference(dialogBasedPrefCat); 

     // List preference 
     ListPreference listPref = new ListPreference(this); 

// This is where I get my dynamic list of levels and use it as a character sequence to 
// To make my list view dynamic.  
     List<String> myList ; 

     myList = Playsound.getAvailableLevels(); // Function which is Dynamic 
     CharSequence[] cs = myList.toArray(new CharSequence[al.size()]); 

     listPref.setEntries(cs); 
     listPref.setEntryValues(cs); 
     // listPref.setEntries(R.array.levels); 
     // listPref.setEntryValues(R.array.levelsValues); 
     listPref.setDialogTitle(R.string.level_title); 
     listPref.setKey("level"); 
     listPref.setTitle(R.string.level_title); 
     listPref.setValueIndex(0); 
     listPref.setDefaultValue(LEVEL_DEFAULT); 
     listPref.setSummary(R.string.level_summary); 
     dialogBasedPrefCat.addPreference(listPref); 

    } 
}