【问题标题】:Simple search filtering in Android listViewAndroid listView中的简单搜索过滤
【发布时间】:2013-07-26 14:35:18
【问题描述】:

我想在我的 Android ListView 中添加简单的搜索过滤器,就像这里一样:

Search.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2,
                int arg3) {

            MainActivity.this.adapter.getFilter().filter(cs);
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,
                int arg2, int arg3) {

        }

        @Override
        public void afterTextChanged(Editable arg0) {

        }
    });

此代码来自互联网上的教程(我丢失了一个网址)。它基于 ArrayAdapter 但在我的课堂上我使用的是 SimpleCursorAdapter 并且此代码不起作用。我的意思是我可以输入,但它不会过滤搜索结果。这是我的代码:

// Create the pointer to the desired data
        dataAdapter = new SimpleCursorAdapter(
                this, R.layout.contact_row, contactsCursor, columns, to, 0);
        ListView listView = (ListView) findViewById(R.id.list);
        Search = (EditText) findViewById(R.id.inputSearch); 

        Search.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2,
                    int arg3) {

                ContactListActivity.this.dataAdapter.getFilter().filter(cs);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                    int arg2, int arg3) {

            }

            @Override
            public void afterTextChanged(Editable arg0) {

            }
        });

有没有办法在 SimpleCursorAdapter 上设置这个过滤功能?

【问题讨论】:

  • 您需要使用 LIKE sql 关键字获取新游标,而不是过滤适配器 ontextchanged,然后在适配器上调用 changecursor。当我有点不舒服时,我会为你写一个例子

标签: android listview search


【解决方案1】:
Search.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2,
                int arg3) {
            String where = *YOURCOLUMN* + " LIKE '%" + cs + "%'";

            Cursor c = db.query(*TABLE*, *COLUMNS*, where, null, null, null, null);

            dataAdapter.swapCursor(c);
            dataAdapter.notifyDataSetChanged();
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,
                int arg2, int arg3) {

        }

        @Override
        public void afterTextChanged(Editable arg0) {

        }
});

显然,您需要输入自己的数据,但在大多数情况下,这应该可以满足您的需求。希望成功!

【讨论】:

  • 嗨,查询中的 COLUMNS 是什么?它是总列名吗?如果是,请输入数组或字符串?
  • @GangadharNimbally 它是一个字符串数组,包含您要查询的数据库中所有列的名称。
猜你喜欢
  • 2013-02-10
  • 1970-01-01
  • 2018-09-24
  • 2018-11-07
  • 2011-12-22
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多