About This Series
This “Android Kotlin Basics” blog series is all about fundamentals. We’ll take a look at the basics of building Android apps with Kotlin from the SUPER basics, to the standard basics, to the not-so-basics. We’ll also be drawing comparisons to how things are done in Kotlin vs. Java and some other programming languages to build Android apps (like C# and Xamarin or JavaScript/TypeScript for Hybrid implementations).
Check Out the Pluralsight Course!
If you like this series, be sure to check out my course on Pluralsight – Building Android Apps with Kotlin: Getting Started where you can learn more while building your own real-world application in Kotlin along the way. You can also join the conversation and test your knowledge throughout the course with learning checks through each module!
Watch it here: https://app.pluralsight.com/library/courses/building-android-apps-kotlin-getting-started/table-of-contents
Auto-mapping Views
We’ve talked in previous posts about how awesome Kotlin is and showed off some of the great features of the language on its own, but did you know Kotlin gets even better when building Android apps?
The Problem
Let’s talk about the obnoxious pattern in Android of having to find a view from the associated layout before using it. I’m talking about this:
// java Button myButton = (Button)findViewById(R.id.myButton);
If you’re totally new to Android development as a whole, this is what you do in your Activities
, Fragments
, ViewHolders
, etc. to get a reference to a control on your page that was created by a layout resource. This means that if you have a page with many controls and views, you will need to execute the above style code for every single one.
What does this mean?
Your code looks gross. You have massive blocks of properties in your class and an equally massive block of findViewById
in your onCreate
or other lifecycle method. It also means that you query your View Object far more than you should need to. Other platforms like iOS and UWP (or any other windows app) create outlets or partial properties that hide the creation of the view in your code, but allow you to use it, which means your code stays super clean.
Because of this awful practice in Android, people have come out with some seriously helpful projects (I’m looking at you Butterknife!) and libraries that will automatically handle mapping them to properties in your Activity and Fragment classes like this:
// Java with Butterknife class ExampleActivity extends Activity { @BindView(R.id.title) TextView title; @BindView(R.id.subtitle) TextView subtitle; @BindView(R.id.footer) TextView footer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.bind(this); // TODO Use fields... } }
That’s a little better, but still a lot of wire up before you can even use the controls in your code.
Kotlin to the Rescue
Kotlin, I cannot thank you enough for doing this…
Kotlin created an Android extension that allows for your Activities to auto-map their layout views by their id in to useable controls!
Here’s how it works: Let’s say you have a layout resource that looks like this:
activity_example.xml
In your Activity
, you simply need to import the extension, and your Activity will automatically have a property it can use that will be pulled from the layout file:
import kotlinx.android.synthetic.main.activity_example.* class ExampleActivity: Activity() { override fun onCreate(savedInstance: Bundle?) { setContentView(R.layout.activity_example) detailTextView.text = "my new text that was set when auto-mapping" } }
Beyond making the code so much cleaner, this Kotlin Android Plugin also uses built in caching of the views it finds in order to avoid re-querying the View Object since it can be cumbersome and slow.
For more details on how to customize this behavior, and use the extension more in depth, check out Kotlin’s documentation on it here: https://kotlinlang.org/docs/tutorials/android-plugin.html
Also, let me know what else you’d like to learn about with Android and Kotlin! Either drop a comment here or tweet at me @Suave_Pirate!
If you like what you see, don’t forget to follow me on twitter @Suave_Pirate, check out my GitHub, and subscribe to my blog to learn more mobile developer tips and tricks!
Interested in sponsoring developer content? Message @Suave_Pirate on twitter for details.
3 thoughts on “Android Kotlin Basics – Auto-mapping Views”