Ví dụ này minh họa cách tạo Spinner Android với văn bản mặc định ban đầu (initial default text) sử dụng Kotlin.
Bước 1: Tạo dự án mới
Trong Android Studio, chọn File → New Project và điền đầy đủ thông tin để tạo dự án mới.
Bước 2: Cấu hình layout chính (activity_main.xml)
Thêm mã sau vào res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="30dp"
android:text="Spinner Sample Program"
android:textColor="@android:color/background_dark"
android:textSize="16sp" />
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp">
</Spinner>
</LinearLayout>
Bước 3: Viết mã MainActivity.kt
Thêm mã sau vào src/MainActivity.kt:
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.AdapterView.OnItemSelectedListener
import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
lateinit var spinner: Spinner
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
spinner = findViewById(R.id.spinner)
val footballPlayers: MutableList<String?> = ArrayList()
footballPlayers.add(0, "Select a player from the list")
footballPlayers.add("Cristian Ronaldo")
footballPlayers.add("Lionel Messi")
footballPlayers.add("Neymar Jr")
footballPlayers.add("Isco")
footballPlayers.add("Gareth Bale")
footballPlayers.add("Luis Suarez")
val arrayAdapter: ArrayAdapter<String?> = ArrayAdapter<String?>(
this, android.R.layout.simple_list_item_1, footballPlayers
)
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = arrayAdapter
spinner.onItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) {
if (parent.getItemAtPosition(position) == "Choose Football players from lis") {
// Mục placeholder - không làm gì
} else {
val item = parent.getItemAtPosition(position).toString()
Toast.makeText(parent.context, "Selected: $item", Toast.LENGTH_SHORT).show()
}
}
override fun onNothingSelected(parent: AdapterView<*>?) {}
}
}
}
Bước 4: Cấu hình AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.q11">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
</intent-filter>
</activity>
</application>
</manifest>
Chạy ứng dụng
Kết nối thiết bị Android thực với máy tính. Từ Android Studio, mở file activity và nhấn biểu tượng Run trên thanh công cụ. Chọn thiết bị di động và kiểm tra màn hình hiển thị.
Cách tiếp cận tốt hơn (Best Practice): Thay vì thêm mục "Select..." vào danh sách dữ liệu, hãy dùng
spinner.setPrompt("Select a player")hoặc triển khai SpinnerAdapter tùy chỉnh cho phép hiển thị prompt riêng biệt mà không làm "ô nhiễm" dữ liệu thực. Cách này tách biệt UI hint và data model rõ ràng hơn.