Create a Search Experience
Last updated
Last updated
Now you have simple app showing a map. In this step, you'll create a simple search and display the search results in a list. You'll also learn how to filter the data displayed on the map based on the search results.
Start by creating a new activity or fragment to facilitate searches on your application. Here we will be using a fragment for search and show to search results on, while using a bottom sheet to display the results. We also create a search input field on our main map activity for the user to input the text they want to search for. This is already setup in the basic example app.
To perform a search you will need to have initiated MapsIndoors
. This was shown in the previous section of the getting started tutorial how you do this.
For advanced usage of the search functionality read the Search guide and tutorials connected to it:
Create a search method that takes a search string as a parameter on your MapsActivity
class. In this example we only use the setTake
on the MPFilter
to limit our result to 30 locations. We will expand on this method later.
Java
Kotlin
To be able to search we will use a text input field where a user can write what they want to search for. This is placed at the top of the MapsActivity
Java
Kotlin
To accompany this we use the SearchFragment
that is already created for you and a BottomSheet
to handle the SearchFragment
.
Observe that the SearchFragment
is just a simple fragment with a RecyclerView
and a SearchItemAdapter
added to it
Java
Kotlin
Create a getter for your MapControl
object on the MapsActivity
so that it can be used in the SearchAdapter
.
Java
Kotlin
Inside the SearchItemAdapter
implement logic to display the locations you get from a search result. Here we show an image of the location marker and show the name of the locations.
Java
Kotlin
We have already implemented the BottomSheet in the UI. Now we add the search fragment to the BottomSheet
in our search query method on our MapsActivity
. You can use the addFragmentToBottomSheet
too add the created fragment to the BottomSheet
. When we have received the search results
Java
Kotlin
The standard implementation animates the camera to fit all Locations on the map and show the info window of a Location, if it's a list of only one Location.
When you are done showing the search results you can call clearMap()
on MapControl
.
Since the default displaySearchResults(List<MPLocation> locations)
uses camera animation we will call it from the UI Thread and implement it in our search method inside the getLocationsAsync result with the list from the method.
Java
Kotlin
Expected result:
To call our search method with the text in the search input field, we then add an EditorActionListener
and a OnClickListener
to the text input field and the search button in the onCreate
of MapsActivity
. Find the full onCreate
example here: or
Find the full onCreate
example here: or
See the full example of SearchFragment
here: or
See the full example of SearchItemAdapter
and accompanying ViewHolder
here: or
See the full example of the search method here: or
When getting a search result, you might want to only show those search results on the map. You can do this through calling displaySearchResults(List<MPLocation> locations)
on MapControl
. This method has different parameters to make it easier for you as a developer to fit your exact need in terms of animation and more. This can be read in the .
The accompanying UI and implementation of this search experience can be found in the getting started app sample. or .