我正在创建一个应用程序,现在我需要向用户询问一些名称(玩家),我将这些值存储在ArrayList
中。
这一切都很完美,但我想知道的是:
如果用户想要更改他已提交的姓名,我该如何撤消他的选择?
考虑我要求在EditText
中输入名称,然后感谢button
,将其值存储在ArrayList
中然后清除({ {1}})。
另一个问题是,如何保持键盘显示?每次你需要添加一个名字时,关闭并再次打开它真的很烦人(24是限制所以它可能非常烦人!)。
这是逻辑部分:
EditText
public void getName(View view){
if(playersAmount > 0) {
names.add(name.getText().toString());
name.setText("");
playersAmount--;
}else{
name.setEnabled(false);
if(playersAmount == -1){
//Intent
Toast.makeText(getNames.this, "Nice", Toast.LENGTH_SHORT).show();
}
playersAmount--;
}
}
是playersAmount
我通过int
从之前的activity
检索到的。{/ p>
答案 0 :(得分:2)
有一个存储以前名称的临时变量。单击撤消按钮后,您可以将名称重新指定为临时变量。
您可以执行以下操作:
temp = "SomeName";
names.set(names.size()-1, temp);
names.size()-1
的原因是因为我假设每次添加名称时都会将其存储在names
的末尾。
有关ArrayList' set {)的更多信息:https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#set(int,%20E)
如果这不是您正在寻找的内容,您只需删除names
的最后一个元素,然后继续添加新名称。
例如,如果您有一个名为"撤消"的按钮,则每次按下该按钮时,都会触发以下操作:
if(/*Undo is clicked*/) {
names.remove(names.size()-1);
}
...
// Continue with your code of adding names
...
有关ArrayList的更多信息,请删除():https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#remove(int)
答案 1 :(得分:0)
要从ArrayList中删除某些内容,您必须拥有它的实例。在这里,您在代码中使用name.getText().toString()
,然后设置name.setText("")
。
更好的策略是仅使用name
和返工getNames
来返回name.getText()
自己的数组,或者(更好)仅使用name
。
如果你想基于索引删除,你也可以通过以下方式访问ArrayList:
List<String> list = new ArrayList<String>();
list.add("Index Zero");
list.add("Index One");
...
System.out.println(list[0]);
答案 2 :(得分:0)
我在评论中建议的另一种方法是让用户在EditText
中输入他们喜欢的所有名称,每个名称用逗号分隔。以下方法将提取所有名称:
public static String[] getNamesFromEditText(EditText editText) {
String editTextContent = editText.getText().toString();
String[] allNames = editTextContent.split(",");
//Remove any leading and trailing blank spaces from each name
for (String name : allNames) {
name = name.trim();
}
return allNames;
}
这样做的好处是用户可以在确认他们的选择之前添加或删除他们喜欢的内容。缺点是如果这些方法没有使用正确的语法并用逗号分隔每个名称,则该方法不起作用。