Giới thiệu
Bài viết này hướng dẫn cách set selection cho Spinner dựa trên giá trị (value/text) của item thay vì vị trí (position/index). Cách này linh hoạt hơn khi dữ liệu thay đổi thứ tự.
Các bước thực hiện
Bước 1: Tạo dự án mới
Khởi tạo project Android Studio mới.
Bước 2: Layout (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".MainActivity">
<Button
android:id="@+id/btnSelectRonaldo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:onClick="selectSpinnerByValue"
android:text="Chọn Cristiano Ronaldo" />
<Spinner
android:id="@+id/spinnerPlayers"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/btnSelectRonaldo"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:text="Chọn Spinner item bằng giá trị (Value) thay vì Position"
android:textAlignment="center"
android:textSize="18sp"
android:textStyle="bold|italic" />
</RelativeLayout>
Bước 3: Code Java (src/MainActivity.java)
package app.com.sample;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends AppCompatActivity {
Spinner spinner;
String[] footballPlayers = {
"Lionel Messi", "Eden Hazard", "Cristiano Ronaldo",
"Neymar Jr", "Gareth Bale", "David Beckham"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = findViewById(R.id.spinnerPlayers);
// Setup adapter
List<String> playersList = new ArrayList<>(Arrays.asList(footballPlayers));
ArrayAdapter<String> adapter = new ArrayAdapter<>(
this,
android.R.layout.simple_spinner_dropdown_item,
playersList
);
// Custom dropdown layout (optional)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
}
// Gọi khi nhấn button
public void selectSpinnerByValue(View view) {
String targetValue = "Cristiano Ronaldo";
setSpinnerSelectionByValue(spinner, targetValue);
}
/**
* Set Spinner selection theo giá trị text của item
* @param spinner Spinner target
* @param value Giá trị cần chọn (text hiển thị)
* @return true nếu tìm thấy và set thành công
*/
public boolean setSpinnerSelectionByValue(Spinner spinner, String value) {
if (spinner == null || value == null) return false;
ArrayAdapter adapter = (ArrayAdapter) spinner.getAdapter();
if (adapter == null) return false;
// Duyệt qua tất cả item trong adapter
for (int i = 0; i < adapter.getCount(); i++) {
Object item = adapter.getItem(i);
if (item != null && value.equals(item.toString())) {
spinner.setSelection(i);
return true;
}
}
return false; // Không tìm thấy giá trị
}
// Overload cho object tùy chỉnh (cần override toString() trong model)
public <T> boolean setSpinnerSelectionByValue(Spinner spinner, T value) {
if (spinner == null || value == null) return false;
ArrayAdapter<T> adapter = (ArrayAdapter<T>) spinner.getAdapter();
if (adapter == null) return false;
for (int i = 0; i < adapter.getCount(); i++) {
if (value.equals(adapter.getItem(i))) {
spinner.setSelection(i);
return true;
}
}
return false;
}
}
Bước 4: Custom spinner dropdown item (res/layout/spinner_item.xml) - Tùy chọn
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:textSize="16sp"
android:textColor="#333333"
android:background="?android:attr/selectableItemBackground" />
Sử dụng: adapter.setDropDownViewResource(R.layout.spinner_item);
Bước 5: Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<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>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Chạy ứng dụng
Chạy app, Spinner hiển thị danh sách cầu thủ. Nhấn nút "Chọn Cristiano Ronaldo" → Spinner tự động chọn item "Cristiano Ronaldo" bất kể nó ở vị trí nào.

Mở rộng: Spinner với Object phức tạp (Custom Model)
// Model
data class Player(val id: Int, val name: String, val country: String) {
override fun toString(): String = name // Hiển thị trong spinner
}
// Adapter
ArrayAdapter<Player> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, playerList);
// Chọn theo object
Player target = new Player(7, "Cristiano Ronaldo", "Portugal");
setSpinnerSelectionByValue(spinner, target); // Sử dụng equals() của Player
// Hoặc chọn theo ID
public void setSpinnerById(Spinner spinner, int targetId) {
ArrayAdapter<Player> adapter = (ArrayAdapter<Player>) spinner.getAdapter();
for (int i = 0; i < adapter.getCount(); i++) {
if (adapter.getItem(i).getId() == targetId) {
spinner.setSelection(i);
break;
}
}
}
Lưu ý
- Phương pháp này O(n) - duyệt tuyến tính. Với list lớn (>1000 items), cân nhắc dùng HashMap<String, Integer> map value→position
- So sánh chuỗi: dùng
equals()không phải== - Case-sensitive: "ronaldo" ≠ "Ronaldo". Dùng
equalsIgnoreCase()nếu cần - Spinner phải đã setAdapter trước khi gọi method này