Android 从SharedReferences中删除ListView选项
我试图以编程方式从SharedReferences中删除列表视图中的一个选项。我在下面包含了简化代码 我已经阅读了大量类似的问题,但它似乎对我不起作用。我一定是误解了一个关键概念。请帮忙 我尝试过使用clear()和apply()。我还尝试添加a行,而不是删除所有行,但没有成功 我想我可能误解了使用哪个键的概念,并尝试了替代键,但似乎没有任何效果 my preferences.javaAndroid 从SharedReferences中删除ListView选项,android,android-listview,sharedpreferences,Android,Android Listview,Sharedpreferences,我试图以编程方式从SharedReferences中删除列表视图中的一个选项。我在下面包含了简化代码 我已经阅读了大量类似的问题,但它似乎对我不起作用。我一定是误解了一个关键概念。请帮忙 我尝试过使用clear()和apply()。我还尝试添加a行,而不是删除所有行,但没有成功 我想我可能误解了使用哪个键的概念,并尝试了替代键,但似乎没有任何效果 my preferences.java package il.preferences; import android.content.SharedP
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();
}
}
my 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>
my 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>
A.
B
C
1.
2.
3.
我的问题是我对偏好框架的概念化错误。我将分享我的错误转向,以帮助任何其他迷路的新手
我混淆了我在上面my preferences.xml中定义的PreferenceScreen,以及可以在DDMS透视图my.package.name_preferences.xml上看到的存储首选项的文件-使用file manager-data-data-project name-shared_prefs来查找和提取此文件
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="myKey">1</string>
</map>
最终我在GoogleAPI中找到了示例代码
com.example.android.api.ApiDemos
com/example/android/api/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);
}
}
import java.util.List;
导入android.os.Bundle;
导入android.preference.ListPreference;
导入android.preference.PreferenceActivity;
导入android.preference.PreferenceCategory;
导入android.preference.PreferenceScreen;
公共类SetPreferenceActivityGB扩展了PreferenceActivity{
私有静态最终字符串长度\u DEFAULT=“4”;
私有静态最终字符串级别\u DEFAULT=“level1”;
@抑制警告(“弃用”)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setPreferenceScreen(createPreferenceHierarchy());
addPreferencesFromResource(R.xml.preferences);
}
private PreferenceScreen createPreferenceHierarchy(){
PreferenceScreen root=getPreferenceManager()。createPreferenceScreen(
这),;
//基于对话框的首选项
PreferenceCategory dialogBasedPrefCat=新的PreferenceCategory(此);
root.addPreference(dialogBasedPrefCat);
//列表首选项
ListPreference listPref=新的ListPreference(此);
//这就是我获取动态级别列表的地方,并将其用作字符序列
//使我的列表视图动态。
列出我的清单;
myList=Playsound.GetAvailableLevel();//动态函数
CharSequence[]cs=myList.toArray(新的CharSequence[al.size()]);
listPref.setEntries(cs);
listPref.setEntryValues(cs);
//listPref.setEntries(R.array.levels);
//listPref.setEntryValues(R.array.levelsValues);
listPref.setDialogTitle(R.string.level_标题);
listPref.setKey(“级别”);
listPref.setTitle(R.string.level_title);
listPref.setValueIndex(0);
listPref.setDefaultValue(默认级别);
listPref.setSummary(R.string.level_summary);
dialogBasedPrefCat.addPreference(listPref);
}
}
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);
}
}