Guides / Building Search UI / Going further

Conditional display in InstantSearch Android

This guide describes what to do when there are no results, when there’s no query, or when there are errors. Sometimes, though, users may not get any hits if their device can’t access the network or the network connection is slow.

If you want to feature content in your search results based on a set of conditions, you can use Algolia Rules to:

To learn how to suppress InstantSearch’s initial search query, check out the conditional requests guide.

Handling no results

Since not all queries lead to results, it’s essential to let users know when this happens by providing hints on how to adjust the query.

Display a message

The easiest way to display a fallback message when a query doesn’t return results is to subscribe to the Searcher’s response event and show your “no results” UI whenever the response has no hits.

1
2
3
4
5
6
7
searcher.response.subscribe {
    if (it == null || it.hitsOrNull.isNullOrEmpty()) {
        showNoResultsUI()
    } else {
        hideNoResultsUI()
    }
}

Handling empty queries

By default, InstantSearch always shows you results, even when the query is empty. Depending on your use case and how you build your UI, you may only want to show results when there’s a query. To override this behavior, you can implement your own SearchBoxView. Instead of calling onQueryChanged or onQuerySubmitted for every query, you can call them only when the query isn’t empty.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class SearchBoxNoEmptyQuery(
    public val searchView: SearchView
) : SearchBoxView {

    override var onQueryChanged: Callback<String?>? = null
    override var onQuerySubmitted: Callback<String?>? = null

    init {
        searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {

            override fun onQueryTextSubmit(query: String?): Boolean {
                query?.isNotEmpty()?.let { onQuerySubmitted?.invoke(query) }
                return false
            }

            override fun onQueryTextChange(query: String?): Boolean {
                query?.isNotEmpty()?.let { onQuerySubmitted?.invoke(query) }
                return false
            }
        })
    }

    override fun setText(text: String?) {
        searchView.setQuery(text, false)
    }
}

Handling errors

If an error occurs, you can display a specific piece of content to help users return to the standard state.

Subscribe to the Searcher’s error event to be notified of errors.

1
2
3
4
5
searcher.error.subscribe {
    if (it != null) {
        Log.e("TAG", "Error on search $query: ${it.message}")
    }
}
Did you find this page helpful?