Spinner

Code: Default | Auth: 03cd82

Android Spinner là một widget dùng để chọn lựa phần tử trong một danh sách. Giống như thẻ SELECT trong HTML và cái Combobox trong ứng dụng trên Windows. 

Dùng Spinner sẽ giúp tiết kiệm không gian giao diện màn hình, khi bấm vào sẽ hiển thị ra một danh sách để chọn.

Làm quen với Spinner bạn thực hiện các bước sau:

1) Khai báo view Spinner trong layout của activity

(Tất nhiên là bạn phải tạo project và có activity rồi nhé. Để cho tiện dụng bạn nên tạo 1 activity mới)

File layout tôi làm như sau (Dùng LinearLayout cho ngắn code)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <Spinner
        android:id="@+id/spinner01"
        android:layout_width="500dp"
        android:layout_height="40dp"
        android:layout_margin="30dp"
    />

</LinearLayout>

 

2) Viết code Java

Bạn mở activity ra viết code lần lượt theo các bước từ trên xuống dưới.

 

package com.spx.trainingapp;

import androidx.appcompat.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 DemoSpinner extends AppCompatActivity {

    // Bước 1: Khai báo một mảng chuỗi làm nguồn dữ liệu
    String [] list_prov = {"Hà Nội","Hải Phòng","TP.HCM"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo_spinner);

        // Bước 2: tạo biến ánh xạ view spinner01
        Spinner spin = (Spinner) findViewById(R.id.spinner01);


        //Bước 3: Tạo Adapter để đổ dữ liệu vào spinner
        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,list_prov);
        // android.R.layout.simple_spinner_item: Cái này là mặc định của android, sau này bạn phát triển custom thì không cần dùng cái này
 
        //Gắn adapter cho spinner
        spin.setAdapter(adapter);

        // Bước 4: Viết sự kiện khi người dùng bấm chọn 1 phần tử trong spinner
        spin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String item_selected = list_prov[position];

                Toast.makeText(getApplicationContext(), item_selected , Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });



    }
}

Kết quả bạn chạy và bấm chọn vào một giá trị như sau:

Demo Spinner

*** Lấy vị trí phần tử được chọn trong sự kiện bấm nút:

Spinner hỗ trợ các phương thức để lấy thông tin phần tử được chọn:

Một số phương thức của spinner

Trường hợp bạn sử dụng spinner trên giao diện nhập liệu thì sẽ cần dùng phương thức getSelected... để lấy thông tin. Ví dụ: Thêm mới sinh viên thì sẽ lấy danh sách lớp đưa lên spinner, khi lưu thông tin sẽ lấy id của lớp trong spinner để lưu vào bảng sinh viên. Vậy nên bạn sẽ làm như sau:

1. Tạo 1 nút bấm trên view để mô phỏng sự kiện bấm nút

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="ClickGetSpinner"
        android:text="Get Spinner Item"/>

2. Trong activity viết hàm ClickGetSpinner()

 public void ClickGetSpinner(View view){
        int index = spin.getSelectedItemPosition();

        Toast.makeText(getApplicationContext(), "Bạn đã chọn phần tử thứ: " + index , Toast.LENGTH_LONG).show();

    }

Chú ý: nếu biến spin được khai báo cục bộ ở trong hàm onCreate thì bạn cần chuyển thành thuộc tính của class. Nghĩa là bạn khai báo biến này trên phần khai báo thuộc tính và bỏ khai báo kiểu dữ liệu ở trong hàm onCreate.

Kết quả chạy như hình dưới, số 2 trong câu thông báo là chỉ số thứ tự của phần tử TP.HCM

Sự kiện bấm nút

*** Thiết lập cho Spinner tự chọn phần tử thứ bao nhiêu:

Bạn sử dụng hàm setSelection() để thiết lập id của phần tử mà spinner sẽ hiển thị trên màn hình khi vào trang.

   spin.setSelection(1);

Ví dụ: Chức năng sửa sinh viên thì hiển thị thông tin lên các editext, nhưng còn lớp thì sẽ hiển thị danh sách từ CSDL đưa lên và bạn kiểm tra sinh viên hiện tại có ID lớp là phần tử thứ mấy trong danh sách thì dùng lệnh trên thiết lập để hiển thị.

Bạn có thể thử nghiệm bằng việc viết lệnh trên ở hàm onCreate.

 

Ghi chú: Sau này bạn muốn đổ đữ liệu từ CSDL ra Spinner thì bạn chỉ cần thay đổi Adapter và custom cái item view. Phần này bạn làm giống như đưa dữ liệu lên listView. Tạm thời bạn tham khảo trong Lab CRUD nhé. Có thời gian tôi sẽ up thêm.