当EditText框为空时显示完整列表

时间:2012-09-30 00:06:44

标签: android listview filter

我有一个EditText组件,可以使用自定义适配器搜索列表。除了已过滤的视图保留在屏幕上之外,它工作正常。如果用户删除了编辑框中的所有文本,我希望完整列表返回到屏幕。

我尝试了三种方法:

  1. 我在适配器的过滤器类中添加了一个条件。将notifyDataSetChanged();放在FilterResults函数中,它会使程序崩溃。

  2. 检测“活动”中的EditTtext框是否为空,然后调用notifyDataSetChanged();。条件有效,因为我看到System.out.println()将文本打印到控制台。但它对listView没有影响。只有过滤后的文字会保留在屏幕上。

  3. notifyDataSetChanged();中放置OnTextChanged()。这对重置列表视图也没有影响。

  4. 当EditText Box为空时,如何让listview重置?

    活动代码:

    //在OnCreate中

    if (searchBox.toString().equals("")){
                    objAdapter.notifyDataSetChanged();
    
    
                }
    
    
            searchBox.addTextChangedListener(new TextWatcher(){
    
                    @Override
                    public void afterTextChanged(Editable arg0) {
                        // Do nothing
                    }
    
                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                        // Do nothing
                    }
    
                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {
                        objAdapter.getFilter().filter(s);
    
    if (s.toString().equals("")){
    
                            // objAdapter.notifyDataSetChanged(); fails here 
    
    }
    
                        }
                    }
    
                });
    

    适配器代码。

        public class NewsRowAdapter extends ArrayAdapter<Item> {
        //.... code
        private class ListFilter extends Filter
            {
                    @Override
                    protected FilterResults performFiltering(CharSequence constraint)
                    {   
                        FilterResults results = new FilterResults();
                        String prefix = constraint.toString().toLowerCase();
    
                        if (prefix == null || prefix.length() == 0)
                        {
    
                            System.out.println("editText is empty");
                            // notifyDataSetChanged(); no effect
    
                            ArrayList<Item> list = new ArrayList<Item>(original);
                            results.values = list;
                            results.count = list.size();
    
    
                        }
                        else
                        {
                            final ArrayList<Item> list = original;
    
                            int count = list.size();
                            final ArrayList<Item> nlist = new ArrayList<Item>(count);
    
                            for (int i=0; i<count; i++)
                            {
                                final Item pkmn = list.get(i);
                                final String value = pkmn.getName().toLowerCase();
                            if (value.startsWith(prefix))
                            {
                                nlist.add(pkmn);
                            }
                        }
                        results.values = nlist;
                        results.count = nlist.size();
                    }
                    return results;
                }
    
                @SuppressWarnings("unchecked")
                @Override
                protected void publishResults(CharSequence constraint, FilterResults results) {
                    fitems = (ArrayList<Item>)results.values;
    
                    clear();
                    int count = fitems.size();
                    for (int i=0; i<count; i++)
                    {
                        Item pkmn = (Item)fitems.get(i);
                        add(pkmn);
                    }
    
                    if (fitems.size() > 0){
                        notifyDataSetChanged();
                    } else{
                        notifyDataSetInvalidated();
                    }
    
                }
    
            }
    

1 个答案:

答案 0 :(得分:1)

而不是searchBox.toString(),请使用searchBox.getText().toString()

searchBox.toString()返回对象的VM引用 - 它永远不会等于什么