簡體   English   中英

當要搜索的Edittext為空時,如何顯示Listview元素?

[英]How can I display Listview elements when Edittext for searching is empty?

當刪除edittext並且沒有搜索值時,我找不到用項目填充Listview的方法。 當我使用Log來監視輸入字符時的值時,我看到即使刪除了edittext值,最后一個字符仍然保留。

我將條件設置為當活動類在onstart()方法上時,edittext.length()等於0以監視列表視圖項。 在我寫了一些東西然后刪除之后,列表視圖被視為空的。 這是我的代碼塊:

public class ProductListActivity extends Activity {

    public static final String TAG = ProductListActivity.class.getSimpleName();

    private static final String Valeron_URL = "http://www.tac.com.tr/valeron.xml";

    ProductListAdapter productListAdapter;
    ListView lvProducts;
    EditText lblSearch;
    private List<Product> productList = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_productlist_temp);
        new ProductDownloaderTask(this).execute(Valeron_URL);
        initializeComponents();
    }

    private void initializeComponents() {
        lvProducts = (ListView) findViewById(R.id.lvProducts);
        lblSearch = (EditText) findViewById(R.id.lblSearch);
    }

    public void updateProducts(List<Product> products) {
        productListAdapter = new ProductListAdapter(this, products);
        lvProducts.setAdapter(productListAdapter);

        lblSearch.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                String text = lblSearch.getText().toString().toLowerCase(Locale.getDefault());
                productListAdapter.filter(text);
            }
        });
    }
}

和這里,

public class ProductListAdapter extends BaseAdapter {

    private ProductListActivity listActivity;
    private LayoutInflater layoutInflater;
    private List<Product> products = null;
    ArrayList<Product> productList;


    public ProductListAdapter(ProductListActivity listActivity, List<Product> products) {
        this.listActivity = listActivity;
        this.layoutInflater = listActivity.getLayoutInflater();
        this.products = products;
        this.productList = new ArrayList<Product>();
        this.productList.addAll(products);
    }

    @Override
    public int getCount() {
        return products.size();
    }

    @Override
    public Object getItem(int position) {
        return products.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View view = layoutInflater.inflate(R.layout.activity_productlist, parent, false);
        ImageView iwProduct = (ImageView) view.findViewById(R.id.iwProduct);
        TextView lblProductInfo = (TextView) view.findViewById(R.id.lblProductInfo);
        TextView lblProductColor = (TextView) view.findViewById(R.id.lblProductColor);
        final Product currentProduct = products.get(position);
        iwProduct.setImageBitmap(currentProduct.getProductImage());
        lblProductInfo.setText(currentProduct.getProductName());
        lblProductColor.setText(currentProduct.getProductColor());
        view.setTag(currentProduct);
        view.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                final Product currentProduct = products.get(position);
                Intent intent = new Intent(listActivity, ProductDetailActivity.class);
                intent.putExtra("productID", currentProduct.getProductId());
                intent.putExtra("productSKU", currentProduct.getProductSKU());
                intent.putExtra("productName", currentProduct.getProductName());
                intent.putExtra("productColor", currentProduct.getProductColor());
                intent.putExtra("productPrice", String.valueOf(currentProduct.getProductPrice()));
                intent.putExtra("productSizeDetail", currentProduct.getProductSizeDetail());
                listActivity.startActivity(intent);
            }
        });
        return view;
    }

    public void filter(String text) {
            text = text.toLowerCase(Locale.getDefault());
            products.clear();
            if (text.length() == 0) {
                this.products.addAll(products);
            } else {
                for (Product product : products) {
                    if (product.getProductName().toLowerCase(Locale.getDefault())
                            .contains(text)) {
                        this.products.add(product);
                    }
                }
            }
        notifyDataSetChanged();
    }
}

我該如何解決?

您的filter()方法似乎不正確。

如下更新您的ProductListAdapter

public class ProductListAdapter extends BaseAdapter {

private ProductListActivity listActivity;
private LayoutInflater layoutInflater;
private List<Product> products;
private List<Product> productList;


public ProductListAdapter(ProductListActivity listActivity, List<Product> products) {
    this.listActivity = listActivity;
    this.layoutInflater = listActivity.getLayoutInflater();
    this.products = products;
    this.productList = new ArrayList<Product>();
    this.productList.addAll(products);
}

@Override
public int getCount() {
    return products.size();
}

@Override
public Object getItem(int position) {
    return products.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View view = layoutInflater.inflate(R.layout.activity_productlist, parent, false);
    ImageView iwProduct = (ImageView) view.findViewById(R.id.iwProduct);
    TextView lblProductInfo = (TextView) view.findViewById(R.id.lblProductInfo);
    TextView lblProductColor = (TextView) view.findViewById(R.id.lblProductColor);
    final Product currentProduct = products.get(position);
    iwProduct.setImageBitmap(currentProduct.getProductImage());
    lblProductInfo.setText(currentProduct.getProductName());
    lblProductColor.setText(currentProduct.getProductColor());
    view.setTag(currentProduct);
    view.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            final Product currentProduct = products.get(position);
            Intent intent = new Intent(listActivity, ProductDetailActivity.class);
            intent.putExtra("productID", currentProduct.getProductId());
            intent.putExtra("productSKU", currentProduct.getProductSKU());
            intent.putExtra("productName", currentProduct.getProductName());
            intent.putExtra("productColor", currentProduct.getProductColor());
            intent.putExtra("productPrice", String.valueOf(currentProduct.getProductPrice()));
            intent.putExtra("productSizeDetail", currentProduct.getProductSizeDetail());
            listActivity.startActivity(intent);
        }
    });
    return view;
}

public void filter(String text) {
        text = text.toLowerCase(Locale.getDefault());
        products.clear();
        if (text.length() == 0) {
            this.products.addAll(productList);
        } else {
            for (Product product : productList) {
                if (product.getProductName().toLowerCase(Locale.getDefault())
                        .contains(text)) {
                    this.products.add(product);
                }
            }
        }
    notifyDataSetChanged();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM