2016-11-08 128 views
0

我正在编写一个程序,它具有PreferenceActivity和多个PreferenceFragment。用户选择的一个选项是要连接的服务器,这是从XML填充的。动态地将选项添加到列表首选项

<string-array name="server_names"> 
    <item>test</item> 
    <item>item1</item> 
    <item>item2</item> 
</string-array> 

<string-array name="server_addresses"> 
    <item>10.10.10.1</item> 
    <item>10.10.10.2</item> 
    <item>10.10.10.3</item> 
</string-array> 

这显然工作正常,你会得到列表中的三个名字。然而,有一个单独的片段允许用户输入名称和IP地址,然后将其添加到下拉列表中作为额外选项。

我有一个工作解决方案,涉及加载外部文件,清除条目并添加文件中的条目。这是'好',但我想用sharedpreferences来保存这些额外的值。我的问题是,如何使用编辑器编写额外的选项,每次启动应用程序时都会保存这些选项?

我已经看过使用Editor,putStringSetcommit但添加的选项不会出现在下拉列表中。有相关的帖子似乎与TextPreference有关,但这些解决方案尚未解决我的问题。

编辑,这是我如何创建我的ListPreference:

<ListPreference 
     android:entries="@array/server_names" 
     android:entryValues="@array/server_addresses" 
     android:key="@string/countryListId" 
     android:negativeButtonText="@null" 
     android:positiveButtonText="@null" 
     android:title="@string/pref_title_select_com_target" 
     android:enabled="true" 
    android:shouldDisableView="false" /> 

我有一个标签上单击处理程序添加到ListPreference:

public boolean onPreferenceClick(Preference preference) { 
       new AlertDialog.Builder(getActivity()) 
         .setTitle("Add new server") 
         .setMessage("Confirm you wish to add the server?") 
         .setIcon(android.R.drawable.ic_dialog_alert) 
         .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 

          public void onClick(DialogInterface dialog, int whichButton) { 
           SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
           SharedPreferences.Editor editor = sharedPref.edit(); 

     /* command in here to edit the server_names and server_addresses */ 
          }}) 
         .setNegativeButton(android.R.string.no, null).show(); 


       return true; 
      } 
     }); 
+0

你设法解决它ListPreference的方法,这种行为? – CantThinkOfAnything

+0

我认为你给了我一个很好的领导,我现在正在尝试一些东西。我相信我误解了SharedPreferences与DefaultSharedPreferences。我正在调查使用setEntries,并会接受答案,如果这样的作品..感谢您的帮助! – Dustybin80

+0

你成功了吗? :D – CantThinkOfAnything

回答

1

写入共享PREF

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPref.edit(); 
editor.putInt("highscore", 5); 
editor.commit(); 

阅读:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
int defaultValue = 0; 
long highScore = sharedPref.getInt("highscore"), defaultValue); 

这是你在问什么?

编辑:

看你的代码,你似乎缺少实际节电。

检查从格雷戈尔答案: How to add new value to listpreference and save it?

他基本上说,每次你打开你的对话框中,从XML列表加载。您需要更改行为以包含SharedPreferences中的首选项。

您可以更改使用setEntries()和 setEntryVaues()

+0

我正在从文档看,我只是无法让它适应ListPreference。我已经使用putStringSet,但更改不会反映在下拉列表中。 – Dustybin80

+0

当您从共享首选项读取时,您必须将其自动添加到下拉菜单的适配器中。 – CantThinkOfAnything

+0

添加之后,您可能还需要调用notifyDatasetChanged()?不知道你的下拉列表使用了什么样的实现。 – CantThinkOfAnything