Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Lấy giá trị Spinner trong Android

Lấy giá trị Spinner trong Android

Hướng dẫn này minh họa cách tạo Spinner (dropdown) và lấy giá trị được chọn trong Android.

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.

Bước 2: Thiết kế giao diện (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="16sp"
    tools:context=".MainActivity">
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true">
    </Spinner>
</RelativeLayout>

Bước 3: Cấu hình dữ liệu (res/values/strings.xml)

<resources>
    <string name="app_name">Sample</string>
    <string-array name="birds">
        <item>crane</item>
        <item>Cuckoo</item>
        <item>Pigeon</item>
        <item>Eagle</item>
        <item>Owl</item>
        <item>Vulture</item>
        <item>WoodPecker</item>
    </string-array>
</resources>

Bước 4: Code MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
    Spinner spinner;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        spinner = findViewById(R.id.spinner);
        
        // Tạo adapter từ string-array resource
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
            R.array.birds, android.R.layout.simple_spinner_item);
        
        // Layout cho dropdown list
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(this);
    }
    
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        // Lấy giá trị được chọn
        String selectedText = parent.getItemAtPosition(position).toString();
        // Hoặc: String selectedText = spinner.getSelectedItem().toString();
        
        Toast.makeText(parent.getContext(), "Selected: " + selectedText, Toast.LENGTH_SHORT).show();
    }
    
    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        // Không chọn gì (hiếm khi xảy ra)
    }
}

Bước 5: Cấu hình AndroidManifest.xml

<?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

Kết nối thiết bị, chạy app. Nhấn vào Spinner để mở dropdown, chọn một loài chim. Toast sẽ hiển thị tên loài chim được chọn.

Các phương thức lấy giá trị Spinner:
// Cách 1: Trong onItemSelected (khuyến khích)
String text = parent.getItemAtPosition(position).toString();

// Cách 2: Từ spinner object bất cứ lúc nào
String text = spinner.getSelectedItem().toString();
int position = spinner.getSelectedItemPosition();
long id = spinner.getSelectedItemId();

// Cách 3: Nếu dùng custom object
MyObject obj = (MyObject) spinner.getSelectedItem();

Spinner với Custom Adapter (Đối tượng phức tạp)

// Model
class Bird {
    String name;
    String scientificName;
    int imageResId;
}

// Custom Adapter
class BirdAdapter extends ArrayAdapter<Bird> {
    // ... implement getView() để hiển thị tên + hình ảnh
}

// Sử dụng
List<Bird> birds = Arrays.asList(
    new Bird("Eagle", "Aquila chrysaetos", R.drawable.eagle),
    new Bird("Owl", "Strigiformes", R.drawable.owl)
);
BirdAdapter adapter = new BirdAdapter(this, birds);
spinner.setAdapter(adapter);

Thiết lập giá trị mặc định

// Chọn item tại vị trí 2 (index 2 = Eagle)
spinner.setSelection(2);

// Hoặc chọn theo giá trị
int position = adapter.getPosition("Eagle");
spinner.setSelection(position);