2012-09-21 68 views
1

我已经设置了SharedPreferences象下面这样:我可以使用sharedPreferences文件中的项目填充AlertDialog吗?

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的那一刻,我想使用SharedPreferences文件,这样我就可以最终动态添加项目等

我用的那一刻填充的代码是:

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”,取而代之的是SharedPreferences文件中使用的字符串。

预先感谢

回答

1

可以使用SharedPreferences的getString()方法对象以检索从共享偏好的字符串。见the documentation for SharedPreferences

编辑: 调整后的答复后,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(); 
} 
+0

我知道getString方法的,我可能会使用GETALL(),我将使用在首选项文件中的所有项目。我只是不确定如何将getAll/getString方法与我目前使用的AlertDialog代码结合使用 –

+0

请参阅我的编辑。这是你在想什么吗?请注意,此代码未经测试。 – Jeff

+0

感谢您的信息!对于延迟回复感到抱歉。我添加了代码,它确实获取了值并填充了菜单项,但是列表没有以正确的顺序出现。什么决定了这个因素? –

0
Use getAll() method in SharedPreferences to get all the keys. And get all the keys and values and display in dialog. 

SharedPreferences prefs = getSharedPreferences("FileName", MODE_PRIVATE); 
    Map<String, ?> map = prefs.getAll(); 
    Set<String> keys = map.keySet(); 
    for(String key : keys) { 
     Log.d(TAG, "key : " + key); 
      Log.d(TAG, "value : " + map.get(key)); 
    } 
+0

我真的不明白这是如何适合我现有的代码。我对Android非常陌生,所以我对不理解抱歉。 我想在我的对话框中看到偏好文件中所有东西的值。如果你可以更详细地解释一下上面的代码是做什么的,那真的有帮助 –

+0

好的,你想在对话框中显示什么?如果您想要显示现有密钥列表 - 对话框中的值,以便用户可以添加更多项目或删除现有项目,则必须从SharedPreferences获取密钥和值的列表,并将其存储在Map中,如上所示。现在在显示对话框之前,编写一个自定义适配器,它将显示具有值的键列表(通过在映射中给出键名来检索值)。然后在点击这些项目上执行你的功能。用于SharedPreferences用法的链接http://developer.android.com/reference/android/content/SharedPreferences.html – knvarma

相关问题