12/08/2018, 15:29

Hello world - Kotlin

Kotlin một ngôn ngữ mới được phát triển bởi JetBrains. Tại sao chúng ta nên sử dụng Kotlin? Lý do là đây. Một ngôn ngữ hiện đại dễ sử dụng. Sau đây chúng ta sẽ tìm hiểu làm sao để xây dựng một ứng dụng Hello world với Kotlin. Đầu tiên chúng ta cần: Androis Studio 3.0 trở lên Để cài đặt ...

Kotlin một ngôn ngữ mới được phát triển bởi JetBrains. Tại sao chúng ta nên sử dụng Kotlin? Lý do là đây. Một ngôn ngữ hiện đại dễ sử dụng. Sau đây chúng ta sẽ tìm hiểu làm sao để xây dựng một ứng dụng Hello world với Kotlin.

Đầu tiên chúng ta cần:

  • Androis Studio 3.0 trở lên

Để cài đặt Kotlin plugin ta thực hiệ như sau: File -> Settings -> Plugins -> Install JetBrains plugin -> Kotlin

Ta bắt đầu khởi tạo một project mới

Lựa chọn Android version

Tạo một activity rỗng

như vậy là ta đã khởi tạo thành công project.

Converting Java code to Kotlin

Activity ta nhận được vẫn là một java file, vì vậy ta cần convert nó sang thành 1 file kt

public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

để convert jave file sang Kotlin bạn có thể đánh thẳng vào ô search "convert java file to kotlin" nó sẽ hiện ra như này:

hoặc có thể chọn Code -> Convert Java file to Kotlin file

Configuring Kotlin in the project

Khi convert java file sang kotlin thì Android studio sẽ thông báo cho chúng ta biết phải config Kotlin cho project để có thể sử dụng được nó

gradle-project

buildscript {
    ext.kotlin_version = '1.1.2-5'
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$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) {
    delete rootProject.buildDir
}

gradle-app

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

...
 
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    testCompile 'junit:junit:4.12'
}
repositories {
    mavenCentral()
}

như vậy là cơ bản ta đã tạo được một project Kotlin build và chạy bình thường.

Make a RecyclerView

Chúng ta sẽ tạo một RecyclerView với Kotlin Khởi tạo một Adapter cho RecyclerView. Về cách thức thì tao tạo một adapter như tương tự khi viết bằng java, nhưng sau đây ta có thể thấy nó được viết rất ngắn ngọn bằng Kotlin

Java

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolder> {
 
    private Context context;
    private ArrayList<String> listName;
 
    public RecyclerViewAdapter(Context context, ArrayList<String> listName) {
        this.context = context;
        this.listName = listName;
    }
...
}

Kotlin

class RecyclerViewAdapter(private val context: Context, private val listName: ArrayList<String>):
        RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolder>() {
}

ta có thể thấy context và listName được viết lại rất gắn ngọn và đầy đủ các val bạn có thể viết 1 các trực tiếp. Tương tự với ViewHolder

java

class RecyclerViewHolder extends RecyclerView.ViewHolder {
 
        private TextView textView;
 
        RecyclerViewHolder(View itemView) {
            super(itemView);
            textView = (TextView) itemView.findViewById(R.id.text_view);
        }
 
        void setData(String label) {
            textView.setText(label);
        }
    }

Kotlin

inner class RecyclerViewHolder(parent: ViewGroup) : RecyclerView.ViewHolder(LayoutInflater
            .from(parent.context).inflate(R.layout.item_view, parent, false)) {
        private val textView: TextView
 
        init {
            textView = itemView.findViewById(R.id.text_view) as TextView
        }
 
        fun setData(label: String) {
            textView.setText(label)
        }
    }

Sau khi có Adapter rồi thì ta thực hiện setAdapter cho RecyclerView

list_view.layoutManager = LinearLayoutManager(this)
list_view.setHasFixedSize(true)
list_view.adapter = RecyclerViewAdapter(this, listName)

như ta thấy list_view có thể được truy xuất trực tiếp chứ không cần đến phương thức findViewById() nữa. Vậy làm sao để ta có thể làm được như vậy, nhìn lại phía trên ViewHolder đc viết bằng Kotlin vẫn phải sử dụng đến findViewById().

Đơn giản ta chỉ cần import thêm

import kotlinx.android.synthetic.main.activity_main.*

trong đó activity_main chính là layout mong muốn, ở đây mình để * để có thể truy xuất tất cả các đối tượng trong activity_main, còn nếu bạn chỉ muốn truy xuất 1 đối tượng cố định nào đó, ví dụ như chỉ truy xuất list_view thì chỉ cần khai báo

import kotlinx.android.synthetic.main.activity_main.list_view

Chú ý: Khi các bạn import kotlinx, có thể sẽ bị hiện thông báo Unresolved reference: kotlinx - không thể xác định đc kotlinx là cái gì. Thì các bạn cần config thêm cho Kotlin. Tại gradle-project thêm

buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}

tại gradle-app thêm

apply plugin: 'kotlin-android-extensions'

thế là bạn có thể sử dụng kotlinx như bình thường rồi.

Trên đây là một tutorial đơn giản giới thiệu về Kotlin cũng nhưng các config Kotlin cho project của bạn. Hãy nhớ là 1 project android bạn vừa có thể sử dụng Java vừa có thể sử dụng Kotlin song song với nhau mà không hề bị vấn đề gì, vì vậy nếu bạn muốn chuyển sang Kotlin thì tại một phần nào đó của project bạn có thể sử dụng Kotlin xem thế nào             </div>
            
            <div class=

0