我正在尝试为用户添加将项添加到上下文菜单的功能。
菜单的XML数组目前是:
<array name="serverchoice">
<item>@string/chicago_server</item>
<item>@string/london_server</item>
<item>@string/sanjose_server</item>
<item>@string/washington_server</item>
<item>@string/chicagoq_server</item>
<item>@string/londonq_server</item>
<item>@string/sanjoseq_server</item>
<item>@string/washingtonq_server</item>
</array>
正如您所看到的那样,它是服务器列表,我希望用户能够添加自己的服务器而不必使用预设服务器。
我创建了一个带有文本框和按钮的页面,以便用户可以进入服务器。当用户单击“添加服务器”按钮时,我希望将条目添加到列表中。
点击时我正在处理菜单项的方式如下:
// Choose Server method
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();
}
private void setServer(int i) {
if (String.valueOf(i).equals("0")){
CustomServer.setText("mcsord.visualware.com");
}
else if (String.valueOf(i).equals("1")){
CustomServer.setText("mcslhr.visualware.com");
}
else if (String.valueOf(i).equals("2")){
CustomServer.setText("mcssjc.visualware.com");
}
else if (String.valueOf(i).equals("3")){
CustomServer.setText("mcsiad.visualware.com");
}
else if (String.valueOf(i).equals("4")){
CustomServer.setText("qualitytestord.visualware.com");
}
else if (String.valueOf(i).equals("5")){
CustomServer.setText("qualitytestlhr.visualware.com");
}
else if (String.valueOf(i).equals("6")){
CustomServer.setText("qualitytestsjc.visualware.com");
}
else if (String.valueOf(i).equals("7")){
CustomServer.setText("qualitytestiad.visualware.com");
}
}
所以我的下一个问题是如何处理新条目。
第一步是将新条目添加到列表中。
任何帮助都会很棒。
由于
答案 0 :(得分:0)
创建一个包含2个edittexts的alertdialog;一个用于名称,另一个用于URL;然后用它来介绍一个新的条目;就像在this example
中提到的那样答案 1 :(得分:0)
您无法将用户的输入存储到包含您静态创建的服务器的阵列资源中。您必须将用户输入的服务器存储到您保存到手机内存,SQLite数据库或使用“共享首选项”(推荐)的文件中。 [http://developer.android.com/guide/topics/data/data-storage.html]。
在回答你的第二个问题时,我可能采取了不同的整体方法。
在您的应用程序入口点,使用共享首选项设置系统
// Shared Preference string
public static final String PREFS = "SomeName";
// Editor to customize preferences
private Editor settingsEditor;
// Shared preference
private SharedPreferences prefs;
//list that will hold all the servers for the menu
private ArrayList<String> menuList = new ArrayList<String>();
在onCreate方法中(用户第一次打开应用程序),您将把定义的服务器名称放入系统中
prefs = getSharedPreferences(PREFS, MODE_PRIVATE);
// Get shared preferences and set up the preference editor
settingsEditor = prefs.edit();
// See if the app has been initialized
if (!prefs.getString("initialized", "").equals("yes")) {
settingsEditor.putString("server0","mcsord.visualware.com");
settingsEditor.putString("server1","mcslhr.visualware.com");
//...do the above step to put the rest of them in
settingsEditor.putInt("menuItemsCount",8);
settingsEditor.putBoolean("initialized", true);
settingsEditor.commit();
}
之后,您将要填充菜单列表
int i = prefs.getInt("menuItemCount", 0);
for(j = 0; j < i; j++)
menuList.add(prefs.getString("sever" + j,"");
现在您要做的是在用户打开页面后,输入服务器名称并单击按钮: 如果它是同一活动中的对话框,您可以将其添加到列表和共享首选项中 如果它在另一个活动中,通过and intent发送,覆盖onActivityResult方法,然后将该字符串添加到列表和共享首选项。
在onCreateContextMenu方法中,遍历包含所有服务器的列表并将其添加到菜单中。最后,您可以在代码中执行此操作
private void openServerDialog() {
new AlertDialog.Buildr(this)
.setTitle(R.string.server_title)
.setItems(R.array.serverchoice,
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialoginterface,
int i) {
CustomServer.setText(menuList.get(i));
}
}).show();
}
希望这有帮助。