Skip to main content

Posts

Apply Kotlin DataBinding to Android Studio Generated Main Activity

I posted how to setup Kotlin and DataBinding in Android Stuido in the last blog (http://marksunghunpark.blogspot.com.au/2017/04/kotlin-binding-library-setup-in-android.html). In this post, I am going to how to use DataBiding in the MainActivity when you create a navigation drawer project from Android Studio templates. Layouts You will have four layouts in app/src/res/layout folder: app/src/main/res/layout/activity_main.xml app/src/main/res/layout/app_bar_main.xml app/src/main/res/layout/content_main.xml app/src/main/res/layout/nav_header_main.xml And activity_main.xml contains all other layout using include layout. You need to have tag in activity_main.xml , app_bar_main.xml and content_main.xml . If you don't have the tag, Binding library cannot recognise the sub layouts properly. Binding library doesn't support toolbar and navigation drawer yet, so you can use using BindingAdapter if you want to use binding library.(But I'm gong to skip this part for simplici
Recent posts

Kotlin + Binding library setup in Android Studio

Envrionment Java 8 Android Studio 2.3.1 gradle 2.3.1 kotlin 1.1.1 DataBinding 2.0 Installing the Kotlin plugin https://blog.jetbrains.com/kotlin/2013/08/working-with-kotlin-in-android-studio/ After installation, restart Android Studio. Setting your project Create src/main/kotlin folder for kotlin source code. Setup project/build.gradle, project/app/build.gradle project/build.gradle buildscript { ext.kotlin_version = '1.1.1' repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) {

How to use Java8 in Android Studio

Java 8 has one very attractive feature I want to use, which is lambda expression. In Android code, we often use anonymous interface to assign event listener such as button. Java's lambda is not quite powerful comparing to other languages support lambda expression but still useful. You can check the information in detail at: https://developer.android.com/guide/platform/j8-jack.html#configuration To use Java 8 feature, you need to download & install Android N(Android 7.0, API level 24).  Android doesn't support all Java8 features:  Default and static interface methods  Lambda expressions (also available on API level 23 and lower)  Repeatable annotations  Method References (also available on API level 23 and lower)  Type Annotations (also available on API level 23 and lower)   You have to config your project Gradle build file. It should be like following: apply plugin : 'com.android.application' android { compileSdkVersion 24 buildToolsVers

How to setup Kotlin in Android Studio

Brief about Kotlin What I am impressed in Kotlin is Android Extensions. It enables you to remove boiler plate code of setting views. You have bind your view object by calling findViewbyId() but Kotlin supports it just importing kotlinx.android.synthetic. .* package. Let's have a look at an example: res/layout/login.xml LoginActivity.kt package com.ispark.kotlin.login import kotlinx.android.synthetic.login.* import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.text.TextUtils import android.util.Log import android.widget.TextView import android.widget.Toast import com.ispark.kotlin.R import kotlin.String public class LoginActivity : AppCompatActivity() { private val LOG_TAG: kotlin.String = "LoginActivity" override fun onCreate(savedInstanceState : Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.login) setTitle(R.string.pleaseSignIn) log

How to test AsyncTask in Android

In Android, test is not as easy as any other platform. Because Android test cannot be run without emulator. Particulary when it comes to AsyncTask or Service, it is difficult to test because they are different type of thread and hard to check their result. Then, how can we ensure the result of AsyncTask valid? AsyncTask is a thread and an asynchnorous as the name means. So, we need to wait for it finishes its job and need to capture the event. Then, when it happens in AsyncTask. It can be one of onBackground() and onPostExecute() methods. It doesn't matter you use onBackground() or onPostExecute() but I prefer onPostExecute(). Anyway, we can test an AsyncTask if we can hook it. Then, how can we hook it? For that, we can use callback pattern. But we need to delay main thread to wait for the AsyncTask's job done because we want to check the result. So the structure for the test would be like: 1. Create AsyncTask A 2. Injection a callback into A 3. Wait until A finish 4.

Fragment LifeCycle

Normal setRetainInstance(true) Description onAttach onAttach Called once the fragment is associated with its activity. onCreate - Called to do initial creation of the fragment. onCreateView onCreateView Creates and returns the view hierarchy associated with the fragment. onActivityCreated onActivityCreated Tells the fragment that its activity has completed its own Activity.onCreate(). onViewStateRestored onViewStateRestored Tells the fragment that all of the saved state of its view hierarchy has been restored. onStart onStart Makes the fragment visible to the user (based on its containing activity being started). onResume onResume Makes the fragment begin interacting with the user (based on its containing activity being resumed). As a fragment is no longer being used, it goes through a reverse series

Let's start Lambda in Android

In Android programming, I think Java & J2EE programming are not that different, we developers put many boiler plate code particularly when we use anonymous instances. Example1. Simple example button1.setOnClickListener(new OnClickListener(){ @Override public void onClick(View view){ //Do something } }); In the above example, what we really need is inside of onClick() method. Other code is actually decorations and we don't want it. How about we can pass just onClick method body as a parameter of setOnClickListener method like below? button1.setOnClickListener(view->{ //Do something }); That's what we have exactly wanted. We can use the code style in Java 8. I think you already might know about Java 8 Lambda but there is no official support for Java 8 in Android 8. It would be awesome we can use it in Android and there is a way to be able to use Lambda in Android as well. You can refer my previous blog to setup RetroLambda in Andro