繁体   English   中英

如何撤消添加到ArrayList的元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM