2012-07-24 145 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); 

    } 
}