[英]How to undo an added element to an ArrayList
我正在制作一个应用程序,现在我需要询问用户几个名字(玩家),并将这些值存储在ArrayList
。
一切都完美运行,但是我想知道的是:
如果用户想更改已经提交的名称,如何让用户撤消选择?
考虑一下,我要求将名称键入到EditText
,然后通过一个button
,将其值存储在该ArrayList
,然后将其清除( EditText
)。
因此,另一个问题是, 如何保持键盘显示? 因为每次您需要添加名称时再次将其关闭再重新打开确实很烦人 (限制为24个,所以可能很烦人!) 。
这是逻辑部分:
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
是我通过intent
从上一个activity
检索到的int
。
有一个临时变量,用于存储先前的名称。 单击撤消按钮后,您可以将名称重新分配为temp变量。
您可以按照以下方式进行操作:
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的remove()的更多信息: https ://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#remove( int)
要从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]);
我在评论中建议的另一种方法是让用户在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;
}
这样做的好处是,用户可以在确认选择之前随意添加或删除任意内容。 缺点是,如果他们没有使用正确的语法并用逗号分隔每个名称,则此方法将不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.