> For the complete documentation index, see [llms.txt](https://android-course.cornellappdev.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://android-course.cornellappdev.com/archive/archived-native-android-textbook-pages/5.-listviews/5.4-searching-in-a-list-view.md).

# 3.4 Searching in a List View

If we wanted to search for an item within a `ListView`, we would have to somehow get input from the user which is something we can do with a specific view type.

The `EditText` will allow us to get user input we can then filter our list with.

![EditText example](/files/-MWwLri572ukAYNvdp6X)

Once we have an `EditText` we can create an `addTextChangedListener`to it to customize the behavior on such actions:

```
editText.addTextChangedListener(object : TextWatcher {
      override fun afterTextChanged(s: Editable?) {
      }
      override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
      }
      override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
      // requery/filter your adapter then set it to your listview
      }
    })
```

The above code has 3 overridden functions:

* `afterTextChanged`
  * &#x20;This method is called to notify you that, somewhere within `s`, the text has been changed.
* `beforeTextChanged`
  * &#x20;This method is called to notify you that, within `s`, the `count` characters beginning at `start` are about to be replaced by new text with length `after`.
* `onTextChanged`
  * &#x20;This method is called to notify you that, within `s`, the `count` characters beginning at `start` have just replaced old text that had length `before`.

`onTextChanged`is the method in which we will requery our adapter and then set it to our list view to change the results of what is displayed after searching; effectively searching.
