6. Add more info to the list
In this section, you will use the Coil image-loading library to display a nice patch about the launch. You will also learn about GraphQL arguments.
Add more info to your query
Go back to LaunchList.graphql
. Your query is already fetching most of the information you want to display, but it would be nice to display both the name of the mission and an image of the patch.
Looking at the schema in GraphQL Playground, you can see that Launch
has a property of mission
, which allows you to get details of the mission. A mission has both a name and a missionPatch
property, and the missionPatch
can optionally take a parameter to specify the desired image size.
Because loading a RecyclerView with large images can impact performance, ask for the name and a SMALL
mission patch. Update your query to look like the following:
1query LaunchList {
2 launches {
3 hasMore
4 cursor
5 launches {
6 id
7 site
8 mission {
9 name
10 missionPatch(size: SMALL)
11 }
12 }
13 }
14}
When you recompile, if you look in LaunchListQuery.kt
, you'll see a new nested type, Mission
, with the two properties you requested.
Any GraphQL field can take arguments like missionPatch
above, and arguments can be of scalar or complex types. In this case, SMALL
is an enum in the GraphQL schema. It can take a finite list of values. If you look at the Docs pane in GraphQL Playground, you will see that size is an argument of type PatchSize
that can only take two values: SMALL
and LARGE
Bind the infos
In LaunchListAdapter.kt
, bind the GraphQL data to the missionName and missionPatch Views using Coil:
1 override fun onBindViewHolder(holder: ViewHolder, position: Int) {
2 val launch = launches.get(position)
3 holder.binding.site.text = launch.site ?: ""
4 holder.binding.missionName.text = launch.mission?.name
5 holder.binding.missionPatch.load(launch.mission?.missionPatch) {
6 placeholder(R.drawable.ic_placeholder)
7 }
8 }
Test your query
Build and run the application, and you will see all the information for current launches.
If you scroll down, you'll see the list includes only about 20 launches. This is because the list of launches is paginated, and you've only fetched the first page.
Next, you will use a cursor-based loading system to load the entire list of launches.