Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我可以用SharedReferences文件中的项目填充AlertDialog吗?_Android_Sharedpreferences_Android Alertdialog - Fatal编程技术网

Android 我可以用SharedReferences文件中的项目填充AlertDialog吗?

Android 我可以用SharedReferences文件中的项目填充AlertDialog吗?,android,sharedpreferences,android-alertdialog,Android,Sharedpreferences,Android Alertdialog,我已设置以下SharedReference: Editor editor = getSharedPreferences("FileName", MODE_PRIVATE).edit(); editor.clear(); editor.putString("chicago", "Chicago, IL"); editor.putString("london", "London, UK"); editor.putString("

我已设置以下SharedReference:

Editor editor = getSharedPreferences("FileName", MODE_PRIVATE).edit();
        editor.clear();
        editor.putString("chicago", "Chicago, IL");
        editor.putString("london", "London, UK");
            editor.putString("sanjose", "San Jose, CA");
            editor.putString("washington", "Dulles, VA");
        editor.commit();
目前,我正在从数组填充AlertDialog,我想使用SharedReferences文件,以便最终可以动态添加项等

目前我用来填充的代码是:

private void openServerDialog() {
        new AlertDialog.Builder(this)   
        .setTitle(R.string.server_title)
        .setItems(R.array.serverchoice, 
                new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialoginterface,
                    int i) {
                setServer(i);   
            }
        })
        .show();
    }
所以我只想停止使用数组“serverchoice”,而是使用SharedReferences文件中的字符串

提前感谢

您可以使用SharedReferences对象的getString()方法从共享首选项中检索字符串。看

编辑: 在OP的评论后调整了答案

private void openServerDialog() {
    SharedPreferences sharedPrefs = getSharedPreferences("FileName", MODE_PRIVATE);
    Map<String, ?> sharedPrefsMap = sharedPrefs.getAll();
    ArrayList<String> stringArrayList = sharedPrefsMap.values();
    CharSequence[] prefsCharSequence = stringArrayList.toArray(new CharSequence[stringArrayList.size()]);

    new AlertDialog.Builder(this)   
    .setTitle(R.string.server_title)
    .setItems(prefsCharSequence, 
    new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialoginterface,
            int i) {
            setServer(i);   
        }
    })
    .show();
}
private void openServerDialog(){
SharedReferences SharedReferences=GetSharedReferences(“文件名”,模式\私有);
Map sharedPrefsMap=sharedPrefs.getAll();
ArrayList stringArrayList=sharedPrefsMap.values();
CharSequence[]prefsCharSequence=stringArrayList.toArray(新的CharSequence[stringArrayList.size());
新建AlertDialog.Builder(此)
.setTitle(R.string.server\u title)
.setItems(预ScharSequence,
新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface DialogInterface,
int i){
设置服务器(i);
}
})
.show();
}
您可以使用SharedReferences对象的getString()方法从共享首选项中检索字符串。看

编辑: 在OP的评论后调整了答案

private void openServerDialog() {
    SharedPreferences sharedPrefs = getSharedPreferences("FileName", MODE_PRIVATE);
    Map<String, ?> sharedPrefsMap = sharedPrefs.getAll();
    ArrayList<String> stringArrayList = sharedPrefsMap.values();
    CharSequence[] prefsCharSequence = stringArrayList.toArray(new CharSequence[stringArrayList.size()]);

    new AlertDialog.Builder(this)   
    .setTitle(R.string.server_title)
    .setItems(prefsCharSequence, 
    new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialoginterface,
            int i) {
            setServer(i);   
        }
    })
    .show();
}
private void openServerDialog(){
SharedReferences SharedReferences=GetSharedReferences(“文件名”,模式\私有);
Map sharedPrefsMap=sharedPrefs.getAll();
ArrayList stringArrayList=sharedPrefsMap.values();
CharSequence[]prefsCharSequence=stringArrayList.toArray(新的CharSequence[stringArrayList.size());
新建AlertDialog.Builder(此)
.setTitle(R.string.server\u title)
.setItems(预ScharSequence,
新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface DialogInterface,
int i){
设置服务器(i);
}
})
.show();
}
在SharedReferences中使用getAll()方法获取所有密钥。并获取所有键和值并显示在对话框中。
SharedReferences prefs=getSharedReferences(“文件名”,模式\私有);
Map Map=prefs.getAll();
Set keys=map.keySet();
用于(字符串键:键){
Log.d(标签,“键:”+键);
Log.d(标记,“值:”+map.get(键));
}
在SharedReferences中使用getAll()方法获取所有密钥。并获取所有键和值并显示在对话框中。
SharedReferences prefs=getSharedReferences(“文件名”,模式\私有);
Map Map=prefs.getAll();
Set keys=map.keySet();
用于(字符串键:键){
Log.d(标签,“键:”+键);
Log.d(标记,“值:”+map.get(键));
}

我知道getString方法,我可能会使用getAll(),因为我将使用preferences文件中的所有项。我只是不确定如何将getAll/getString方法与我目前拥有的AlertDialog代码结合使用,请参见我的编辑。你是这么想的吗?注意:此代码未经测试。谢谢您提供的信息!很抱歉延迟回复。我已经添加了您的代码,它确实获取了值并填充了菜单项,但是列表的显示顺序不正确。是什么决定了这个因素?我还应该说Eclipse建议我将代码更改为您的示例中所示的代码UpperGetAll()返回一个映射,它不给您特定的顺序。我建议大家阅读一下数据结构。排序ArrayList的一种简单方法是使用Collections.sort(stringArrayList);这将按字典顺序对字符串列表进行排序。如果需要以不同的方式进行排序,则需要自己实现。我知道getString方法,可能会使用getAll(),因为我将使用首选项文件中的所有项。我只是不确定如何将getAll/getString方法与我目前拥有的AlertDialog代码结合使用,请参见我的编辑。你是这么想的吗?注意:此代码未经测试。谢谢您提供的信息!很抱歉延迟回复。我已经添加了您的代码,它确实获取了值并填充了菜单项,但是列表的显示顺序不正确。是什么决定了这个因素?我还应该说Eclipse建议我将代码更改为您的示例中所示的代码UpperGetAll()返回一个映射,它不给您特定的顺序。我建议大家阅读一下数据结构。排序ArrayList的一种简单方法是使用Collections.sort(stringArrayList);这将按字典顺序对字符串列表进行排序。如果您需要以不同的方式进行排序,那么您需要自己实现它。我真的不明白这如何适合我现有的代码。我对安卓系统还很陌生,所以我很抱歉不能理解。我想查看对话框中的项目与首选项文件中所有内容的值。如果你能再解释一下上面的代码是怎么做的,那将非常有帮助好的,你想在对话框中显示什么。。?如果您想在对话框中显示现有键-值的列表,以便用户可以添加更多项或删除现有项,那么您必须从SharedReferences获取键和值的列表,并将其存储在上面的映射中。现在,在显示对话框之前,编写自定义适配器,它将显示带有值的键列表(通过在映射中提供键名称来检索值)。然后在单击项目时执行您的功能。SharedReferences用法的链接我真的不明白这如何适合我现有的代码。我对安卓系统还很陌生,所以我很抱歉不能理解。我想查看对话框中的项目与首选项文件中所有内容的值。如果你能多解释一下上面的代码是怎么做的,那会很有帮助的好吧,你该怎么做