iT邦幫忙

2023 iThome 鐵人賽

DAY 12
1
Mobile Development

Android studio使用過程與開發說明系列 第 12

Day12 - 小型火車購票功能 介紹 Spinner 使用法方

  • 分享至 

  • xImage
  •  

前言
小弟我在這邊會做出一個小型的火車購票系統框架,使用Spinner來進行選購需要的車票類型,因為這裡的主角是Spinner,所以小弟我會把Spinner常用的函式與它的監聽器方法,來給大家當參考做使用,因為這是一個小型專案,所以小弟我的功能會很楊春請大家見諒。
功能如下
介紹:小弟我用二個Spinner(下拉式選單)和3個TextView來做使用,剛開啟使會有預選的功能,畫面會長的跟圖案一模一樣,當選擇後會即時變更票上的資訊。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="409dp"
        android:layout_height="219dp"
        android:layout_marginTop="96dp"
        android:orientation="vertical"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:gravity="center"
            android:text="我的下拉式選單"
            android:textColor="@color/black"
            android:layout_weight="1" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="2"
            android:orientation="horizontal">

            <Spinner
                android:id="@+id/spinner"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1" />

            <Spinner
                android:id="@+id/spinner2"
                android:layout_width="0dp"
                android:entries="@array/ticket"
                android:layout_height="match_parent"
                android:layout_weight="1" />
        </LinearLayout>

        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="TextView" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="TextView" />

        <Space
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="5" />

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

Java Code

package com.example.myapplicationspinner;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Arrays;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private Spinner city_spinner;
    private Spinner ticket_shape_spinner;
    private TextView ticket_shape_textview;
    private TextView city_name_textview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ById();//綁定元件
        setMySpinner();//set spinner item
        ticket_spinnerListener(); //設定選票下拉式選單監聽者
        City_spinnerListener(); //設定城市下式選單監聽者
    }
    //綁定元件
    public void ById(){
        city_spinner = findViewById(R.id.spinner);
        ticket_shape_spinner = findViewById(R.id.spinner2);
        ticket_shape_textview = findViewById(R.id.textView2);
        city_name_textview = findViewById(R.id.textView);

    }
    //set spinner item
    public void setMySpinner() {
        String SpinnerItem[] = {"台北市","台中市","南投縣","台南市"};

        ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, SpinnerItem);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        city_spinner.setAdapter(adapter);

    }
    public void City_spinnerListener(){
        city_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                // 在選項選擇時執行的程式碼
                String city_selectedOption = (String) parent.getItemAtPosition(position);

                city_name_textview.setText("城市:" + city_selectedOption); //設定TextView文字顯示在畫面上

                // 執行你想要的功能,例如顯示選擇的選項
                Toast.makeText(getApplicationContext(), "選擇了:" + city_selectedOption, Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // 在未選擇任何選項時執行的程式碼
                // 可以不實作這個方法,如果不需要處理未選擇事件
            }
        });
    }
    public void ticket_spinnerListener(){
        ticket_shape_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                // 在選項選擇時執行的程式碼
                String ticket_selectedOption = (String) parent.getItemAtPosition(position);
                // 執行你想要的功能,例如顯示選擇的選項
                ticket_shape_textview.setText("車票類型:" + ticket_selectedOption);
                Toast.makeText(getApplicationContext(), "選擇了:" + ticket_selectedOption, Toast.LENGTH_SHORT).show();
                // 在這裡可以添加其他的程式碼來處理選項選擇事件
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // 在未選擇任何選項時執行的程式碼
                // 可以不實作這個方法,如果不需要處理未選擇事件
            }
        });
    }

}

Spinner監聽器介紹
介紹函式如下:
1.onItemSelected(AdapterView<?> parent, View view, int position, long id)

  • parent: 這是一個 AdapterView<?> 參數,表示被選擇的 Spinner 物件本身。通過這個參數,你可以存取 Spinner 的屬性、方法和 Adapter。
  • view: 這是一個 View 參數,表示被選擇的選項的視圖。通常你可以忽略這個參數,除非你有特定的需求需要處理這個視圖。
  • position: 這是一個整數,表示被選擇的選項在 Spinner 中的位置(索引)。位置從 0 開始,代表第一個選項,代表第二個選項,依此類推。
  • id: 這是一個長整數,表示被選擇的選項的 ID。在大部分情況下,這個參數可以忽略,因為在 Spinner 中通常不使用 ID。
  1. onNothingSelected(AdapterView<?> parent)
  • 同上
        ticket_shape_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id){
                 //當被選擇完後做動作
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // 在未選擇任何選項時執行的程式碼
                // 可以不實作這個方法,如果不需要處理未選擇事件
            }
        });

結言
Spinner本身是一個常用到的物件希望大家都有學到的使用方式,我這種方式是比較即時性的方法,當然你也可以用Button來做出最後的送出。那這次介紹就到這邊謝謝大家。


上一篇
Day11 - Spinner的新增方式
下一篇
Day-13 讓物件擁有邊框線
系列文
Android studio使用過程與開發說明30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言