如何使用Android中的编辑文本搜索列表视图?

时间:2015-04-24 04:14:03

标签: android android-listview

我想通过在ListView内写一些内容来搜索EditText。就像我先写“Su”字样一样,所以ListView中前两个单词为“Su”的内容应该排在最前面。

这是我的代码:

Sear = (AutoCompleteTextView) findViewById(R.id.Search);
    Sear.setThreshold(1);

    Sear.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            System.out.println("Text ["+s+"]");

            sdAdapter.getFilter().filter(s.toString());                           
        }

        @Override

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

现在我在EditText ListView消息中写点什么。 我的ListView中有5列。我想搜索该特定人的姓名,并使用该名称搜索ListView

这是适配器:

sdAdapter = new StationDetails_Adapter(AllStations.this, R.layout.listview_row2 , Stationlist);

2 个答案:

答案 0 :(得分:1)

ListView中搜索可以使用本地SQLite DB完成。我想你已经掌握了SQLite数据库的知识,然后按照以下步骤操作:

1)设置ListView适配器并将所有数据存储在SQLite数据库

2)在DB端写一个简单的查询,如:select * from YOUR_TABLE_NAME where column_name like '%+your_search_keyword+%'

3)在onTextChanged()方法中执行此查询。

4)使用游标从SQLite DB获取针对搜索关键字的所有数据并设置ListView适配器

5)如果游标没有返回任何数据,则表示您没有针对搜索关键字的记录。

其他方式:除了SQLite DB,您可以在特定的搜索关键字上设置适配器和过滤器,如:

例如:

    String products[] = {"Dell Inspiron", "HTC One X", "HTC Wildfire S", "HTC Sense", "HTC Sensation XE",
                                    "iPhone 4S", "Samsung Galaxy Note 800",
                                    "Samsung Galaxy S3", "MacBook Air", "Mac Mini", "MacBook Pro"};

            lv = (ListView) findViewById(R.id.list_view);
            inputSearch = (EditText) findViewById(R.id.inputSearch);

            // Adding items to listview
            adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, products);
            lv.setAdapter(adapter);

inputSearch.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
        // When user changed the Text
        MainActivity.this.adapter.getFilter().filter(cs);   
    }

    @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
            int arg3) {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterTextChanged(Editable arg0) {
        // TODO Auto-generated method stub                          
    }
});

以上示例来自Android Hive Tutorial

答案 1 :(得分:-1)

您必须在listAdapter中实现filterable。 下面的示例与您想要的相同。

http://www.androidbegin.com/tutorial/android-search-listview-using-filter/