通过 ArrayList 搜索时的错误
Bugs When Searching Through ArrayList
我有一个对象的 ArrayList。每当用户输入 searchView 时,我都会使用此方法,这就是 filterBy。变量 byName 是一个布尔值,用于确定我们是按名称搜索还是按代码搜索。我的错误是:
- 我正在使用关键字 "alfalfa" 对其进行测试,但每次输入字母时它都会 returns 额外的项目(我通过对数据库本身执行相同的操作来进行检查)。
- 如果我在 searchView 中有文本时单击开关(更改 byName 布尔值),它将继续删除项目,直到什么都没有为止。
- 删除 searchView 中的文本也会继续删除文本(这让我感到困惑,因为它要从中删除项目的列表只会在此方法中设置)。
想知道是什么原因造成的吗?
private void displayProducts() {
final Querier querier = new Querier(this);
ProductListAdapter productListAdapter;
if (filterBy.equals("")) {
products = querier.getProductsListing();
productListAdapter = new ProductListAdapter(this, products.getProductsList(), byName);
} else {
Products ps = products;
for (int i = 0; i < products.getProductsList().size(); i++) {
final Product prod = ps.getProductsList().get(i);
if (byName) {
if (!prod.getProductName().toLowerCase().contains(filterBy))
ps.getProductsList().remove(prod);
} else if (!prod.getOrderCode().toLowerCase().contains(filterBy))
ps.getProductsList().remove(prod);
}
Log.v("removed some junk, now there are", String.valueOf(ps.getProductsList().size()));
productListAdapter = new ProductListAdapter(this, ps.getProductsList(), byName);
}
productsLinearLayout.setAdapter(productListAdapter);
}
如果这对后续的其他人有帮助,请按以下方式解决。
private void displayProducts() {
final Querier querier = new Querier(this);
ProductListAdapter productListAdapter;
products = querier.getProductsListing();
if (filterBy.equals(""))
productListAdapter = new ProductListAdapter(this, products.getProductsList(), byName);
else {
ArrayList<Product> ps = new ArrayList<>(products.getProductsList());
for (Product p : products.getProductsList()) {
if (byName) {
if (!p.getProductName().toLowerCase().contains(filterBy))
ps.remove(p);
} else {
if (!p.getOrderCode().toLowerCase().contains(filterBy))
ps.remove(p);
}
}
Log.v("removed some junk, now there are", String.valueOf(ps.size()));
productListAdapter = new ProductListAdapter(this, ps, byName);
}
productsLinearLayout.setAdapter(productListAdapter);
}
我有一个对象的 ArrayList。每当用户输入 searchView 时,我都会使用此方法,这就是 filterBy。变量 byName 是一个布尔值,用于确定我们是按名称搜索还是按代码搜索。我的错误是:
- 我正在使用关键字 "alfalfa" 对其进行测试,但每次输入字母时它都会 returns 额外的项目(我通过对数据库本身执行相同的操作来进行检查)。
- 如果我在 searchView 中有文本时单击开关(更改 byName 布尔值),它将继续删除项目,直到什么都没有为止。
- 删除 searchView 中的文本也会继续删除文本(这让我感到困惑,因为它要从中删除项目的列表只会在此方法中设置)。
想知道是什么原因造成的吗?
private void displayProducts() {
final Querier querier = new Querier(this);
ProductListAdapter productListAdapter;
if (filterBy.equals("")) {
products = querier.getProductsListing();
productListAdapter = new ProductListAdapter(this, products.getProductsList(), byName);
} else {
Products ps = products;
for (int i = 0; i < products.getProductsList().size(); i++) {
final Product prod = ps.getProductsList().get(i);
if (byName) {
if (!prod.getProductName().toLowerCase().contains(filterBy))
ps.getProductsList().remove(prod);
} else if (!prod.getOrderCode().toLowerCase().contains(filterBy))
ps.getProductsList().remove(prod);
}
Log.v("removed some junk, now there are", String.valueOf(ps.getProductsList().size()));
productListAdapter = new ProductListAdapter(this, ps.getProductsList(), byName);
}
productsLinearLayout.setAdapter(productListAdapter);
}
如果这对后续的其他人有帮助,请按以下方式解决。
private void displayProducts() {
final Querier querier = new Querier(this);
ProductListAdapter productListAdapter;
products = querier.getProductsListing();
if (filterBy.equals(""))
productListAdapter = new ProductListAdapter(this, products.getProductsList(), byName);
else {
ArrayList<Product> ps = new ArrayList<>(products.getProductsList());
for (Product p : products.getProductsList()) {
if (byName) {
if (!p.getProductName().toLowerCase().contains(filterBy))
ps.remove(p);
} else {
if (!p.getOrderCode().toLowerCase().contains(filterBy))
ps.remove(p);
}
}
Log.v("removed some junk, now there are", String.valueOf(ps.size()));
productListAdapter = new ProductListAdapter(this, ps, byName);
}
productsLinearLayout.setAdapter(productListAdapter);
}