搜索ArrayList时的错误

时间:2015-06-17 12:31:36

标签: android arraylist contains

我有一个对象的ArrayList。每当用户键入searchView时,我都会使用此方法,这就是filterBy。变量byName是一个布尔值,用于确定我们是按名称还是代码进行搜索。我的错误是:

  1. 我正在使用关键字“alfalfa”对其进行测试,但每次输入一个字母时它都会返回额外的项目(我在数据库本身做同样的检查)。
  2. 如果我在searchView中有文本时单击开关(更改byName布尔值),它将继续删除项目,直到没有任何内容为止。
  3. 在searchView中删除文本也会继续删除文本(这个让我感到困惑,因为删除项目的列表只会在此方法中设置)。
  4. 有关导致此问题的任何想法?

    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);
    }
    

1 个答案:

答案 0 :(得分:0)

如果这对其他人有帮助的话,我就是这样修理的。

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);
}