我遇到了其中有名称项的Arraylist的情况。我需要遍历该列表,以检查用户提供的新名称是否已经在列表中。如果是这样,只需举杯以告知用户该名称已经存在,否则,请向列表中添加名称。
这就是我所拥有的:
public class ActivityPlayers extends AppCompatActivity {
public static ArrayList<NameItem> mNameList;
private Button buttonAdd;
private EditText textAdd;
private int checkNumber;
/** When "add" button been clicked... **/
textAdd = findViewById(R.id.name_input);
buttonAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/** Loop the list **/
for (int i = 0; i < mNameList.size(); i++) {
/** Check if user input match to any name in list
and if it does...**/
if (mNameList.get(i).getText1().equals(textAdd.toString().trim())) {
checkNumber = 1;
break;
} else {
/** If it doesn't **/
checkNumber = 0;
}
}
/** if checkNumber is still 0 **/
if (checkNumber == 0) {
/** Close soft keyboard **/
InputMethodManager input = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
input.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
/** ...add a name to the namelist **/
addItem(0);
} else {
/** if name in a list == name from input, give toast **/
Toast toast = Toast.makeText(getApplicationContext(),
"Name is already on a list", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
}
}
});
有什么想法为什么行不通?它只会将名称添加到列表中,即使已经存在也是如此...但是它永远不会检测到重复项...
答案 0 :(得分:2)
if (mNameList.get(i).getText1().equals(textAdd.toString().trim()))
在上面的代码行中,将第 i 个列表元素与EditText本身的字符串表示形式而不是其Text字段进行比较。您应该使用textAdd.toString()
代替textAdd.getText()
。
与问题无关,但是我建议使用boolean
变量来表示代码中的逻辑标志,而不是整数计数。
在上面的示例中,它将如下所示:
private boolean nameInList = false;
//...
if (...) {
nameInList = true;
break;
}
//...
if (nameInList) {
//...
} else {
//...
}
答案 1 :(得分:0)
尝试一下:
if (mNameList.get(i).getText1().equalsIgnoreCase(textAdd.getText().toString().trim())) {
checkNumber = 1;
break;
} else {
/** If it doesn't **/
checkNumber = 0;
}
答案 2 :(得分:0)
我建议您使用合适的数据结构 Set ,该结构不允许重复值。您还将从循环中保存自己。
例如创建一个设置对象
Set<String> names = new TreeSet();
调用 add(),如果set中不存在名称,则返回true,否则返回false表示名称存在。
Set<String> names = TreeSet();
boolean isExists = names.add("my name");
if(isExists){ // make you toast here}