动态添加选项到列表首选项

时间:2016-11-08 11:29:04

标签: java android listpreference

我正在编写一个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地址,然后将其作为额外选项添加到下拉列表中。

我有一个有效的解决方案,包括加载外部文件,清除条目并添加文件中的条目。这是“好的”#39;但是我想用sharedpreferences来保存这些额外的值。我的问题是,如何使用编辑器编写每次启动应用时都会保存的额外选项?

我查看过使用EditorputStringSetcommit,但添加的选项并未出现在下拉菜单中。有些相关帖子似乎与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;
            }
        });

1 个答案:

答案 0 :(得分:1)

写入共享首页

.propos_underline{
  height: 1px;
  width: 60%;
  margin: 0 auto;
  background-color: #d4d8da;
  position: relative;
}

.propos_underline .icon{
   position: absolute;
   width: 70px;
   height: 40px;
   background: #ffffff;
   font-size: 30px;
   margin: auto;
   top: 0;
   bottom: 0;
   left: 0;
   right: 0;
   color: #d4d8da;
}
.icon-cubes:before {
   content: "\e993";
}

阅读:

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

这是你要问的吗?

编辑:

查看您的代码,您似乎错过了实际的保存。

检查Gregor的答案: enter image description here

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

  

您可以使用setEntries()和更改此行为   ListPreference的setEntryVaues()方法