Android學習小記1(下)---下拉框二級聯動和跳轉樣例的實現


觀前提示:本文主要講的樣例是自己的課堂作業,剛起步很多都不會,其中不專業的部分請見諒。此外,本文繼上一篇文章的樣式,主要着重在代碼實現方面

配置環境:Windows 10平台下Android Studio 2021.1.1 Patch1,測試手機是Nexus 6(Android11)配置見我的第一篇博客

目錄

1.1下拉框二級聯動

1.1下拉框二級聯動

平常生活之中,二級聯動乃至多級聯動是十分常見的。從本樣例中的學院--專業,大到省--市--區的多級聯動。本文用的算是一種死板的方法,我后面會繼續改進(大概)。下面直接上代碼:

=寫於2022-3-08===

項目架構如下:

image-20220309090956791

本次二級聯動所用到的僅僅是紅框標注的部分。(也可以看上一個博客:https://www.cnblogs.com/NaCHO3/p/16002794.html)

MainActivity.java:

package com.example.studentmgr;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.Spinner;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        academy_sp = (Spinner) findViewById(R.id.Stuacademy);
        major_sp = (Spinner) findViewById(R.id.Stumajor);
        setSpinner();
    }
    //下拉框--二級聯動
    Spinner academy_sp, major_sp;
    ArrayAdapter<String> adapter_aca, adapter_maj;
    String aca = "請選擇學院";
    String maj = "請選擇班級";
    String[] academylist = new String[]{"請選擇學院", "計算機學院", "電氣學院"};
    String[] majorliste = new String[]{"請選擇班級", "電氣工程", "電機工程"};
    String[] majorlistc = new String[]{"請選擇班級", "軟件工程", "信息安全", "物聯網 "};

    //下拉框二級聯動方法
    public void setSpinner() {
        //變量初始化
        //綁定適配器和值
        adapter_aca = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, academylist);
        academy_sp.setAdapter(adapter_aca);
        academy_sp.setSelection(0, true);//設置初始默認值
        //綁定適配器和值
        adapter_maj = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, majorliste);
        major_sp.setAdapter(adapter_maj);
        major_sp.setSelection(0, true);//設置初始默認值
        //設置列表項選中監聽
        academy_sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                //根據選中的不同的值綁定不同的適配器
                //判斷是哪個學院,來選擇對應的專業
                aca = adapterView.getItemAtPosition(i).toString();
                if (aca.equals("計算機學院")) {
                    adapter_maj = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, majorlistc);
                    major_sp.setAdapter(adapter_maj);
                } else if (aca.equals("電氣學院")) {
                    adapter_maj = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, majorliste);
                    major_sp.setAdapter(adapter_maj);
                }
            }
            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
            }
        });
        //設置列表項選中監聽
        major_sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                maj = adapterView.getItemAtPosition(i).toString();
            }
            //獲取列表項的值
            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
            }
        });
    }
}

activity_main.xml:(僅僅需要看下拉框部分就行)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <!--姓名-編輯框-->
    <LinearLayout
        android:layout_width="368dp"
        android:layout_height="wrap_content"
        tools:layout_editor_absoluteY="0dp"
        android:orientation="horizontal"
        tools:layout_editor_absoluteX="8dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:textSize="18sp"
            android:textColor="@android:color/background_dark"
            android:text="姓名">
        </TextView>
        <EditText
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:hint="請輸入姓名"
            android:id="@+id/Stuname">
        </EditText>
    </LinearLayout>
    <!--學號-編輯框-->
    <LinearLayout
            android:layout_width="368dp"
            android:layout_height="wrap_content"
            tools:layout_editor_absoluteY="0dp"
            android:orientation="horizontal"
            tools:layout_editor_absoluteX="8dp">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:textSize="18sp"
                android:textColor="@android:color/background_dark"
                android:inputType="number"
                android:text="學號">
            </TextView>
            <EditText
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:hint="請輸入學號"
                android:id="@+id/StuNum">
            </EditText>
    </LinearLayout>
    <!--性別-單選框-->
    <RadioGroup
       android:layout_width="match_parent"
       android:layout_height="40dp"
       android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:textSize="18sp"
            android:textColor="@android:color/background_dark"
            android:text="性別">
        </TextView>
       <RadioButton
           android:id="@+id/man"
           android:layout_width="50dp"
           android:layout_height="wrap_content"
           android:text="男"/>
       <RadioButton
           android:id="@+id/woman"
           android:layout_width="50dp"
           android:layout_height="wrap_content"
           android:text="女"/>
   </RadioGroup>
    <!--學院-下拉框(二級聯動)-->
    <LinearLayout
        android:layout_width="368dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:textSize="18sp"
            android:textColor="@android:color/background_dark"
            android:text="學院" />
        <Spinner
            android:id="@+id/Stuacademy"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <!--專業-下拉框(二級聯動)-->
    <LinearLayout
        android:layout_width="368dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:textSize="18sp"
            android:textColor="@android:color/background_dark"
            android:text="專業" />
        <Spinner
            android:id="@+id/Stumajor"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <!--愛好-復選框-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:textSize="18sp"
            android:textColor="@android:color/background_dark"
            android:text="愛好" />
        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="文學"/>
        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="體育"/>
        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="音樂"/>
        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="美術"/>
    </LinearLayout>
    <!--按鈕-->
    <Button
        android:id="@+id/StuAdd"
        android:onClick="Add"
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:background="#3F51B5"
        android:textColor="#FFFFFF"
        android:textSize="18sp"
        android:text="注冊"/>
</LinearLayout>

說完了二級聯動,接下來我用我的課堂作業來作為例子,來講下注冊跳轉(涉及到listview)

1.2listview實現(課堂作業小結)

題目

創建一個項目(名稱:StudentMgr),項目中包含兩個活動,分別為 ActivityMain 和 ActivityStudent 要求如下:
上機: 使用基本 View 編寫程序
(1)ActivityMain 有一個 Button(btnAdd)和一個 ListView (lvwStudent)控件,ListView 用於顯示若干個學生的基本信息(顯示 的內容包括:學生圖片<隨便>、學生姓名、學生學院及專業,布局方式 自定)。點擊 Button 控件,跳轉到 ActivityStudent。

(2)ActivityStudent 上實現學生信息的錄入,包括:姓名(編輯框), 學號(編輯框,只能輸入數字),性別(兩個 RadioButton) ,學院(下 拉框,可選:計算機學院、電氣學院),專業(下拉框,與學院實現二 級聯動。計算機學院有軟件工程、信息安全、物聯網;電氣學院有電氣 工程、電機工程),愛好(多個復選框:文學、體育、音樂、美術)。

(3)在 ActivityStudent 設置一個提交按鈕 Button(btnSubmit),點 擊該按鍵,跳轉到 ActivityMain,在 ActivityMain 的 ListView 上增加
一個子項,顯示(2)中輸入的學生信息。

從以上題目內容可以看出,是創建2個視圖,由於需要使用listview方式來進行顯示,所以需要一個item子項和一個listview作為基底來進行顯示。

item.xml創建如下:(位置res/layout/item.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <!--圖片-->
    <ImageView
        android:id="@+id/img_item"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:background="@mipmap/ic_launcher_round"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:orientation="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="40dp">
            <!--姓名-->
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="姓名:"
                android:textSize="20dp"
                android:gravity="center_vertical"/>
            <TextView
                android:id="@+id/name_item"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:textSize="20dp"
                android:text="張三"
                />
        </LinearLayout>
        <!--學院-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="40dp">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="學院:"
                android:textSize="20dp"
                android:gravity="center_vertical"/>
            <TextView
                android:id="@+id/academy_item"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:textSize="20dp"
                android:text="計算機學院"
                />
        </LinearLayout>
        <!--專業-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="40dp">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="專業:"
                android:textSize="20dp"
                android:gravity="center_vertical"/>
            <TextView
                android:id="@+id/major_item"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:textSize="20dp"
                android:text="軟件工程"
                />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

顯示效果如下:

image-20220314092412430

然后在ShowActivity中建立listview,使用simpleadapter方式來進行列表的賦值。

activity_show.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".ShowActivity">
    <!--列表(內部的item是視圖)-->
<ListView
    android:layout_width="wrap_content"
    android:layout_height="500dp"
    android:id="@+id/listview"
    ></ListView>
    <!--Button-->
    <Button
        android:id="@+id/back"
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:background="#3F51B5"
        android:textColor="#FFFFFF"
        android:textSize="18sp"
        android:text="跳轉回注冊界面"></Button>
</LinearLayout>

效果:

image-20220314112104891

ShowActivity.java:

package com.example.studentmgr;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ShowActivity extends AppCompatActivity {
    //
    private ListView listview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show);

        //顯示從MainActivity傳遞來的數據,通過Bundle方法,Intent手段
        Intent intent=getIntent();
        Bundle bundle=intent.getExtras();

        //用於儲存item視圖所需要的數據集合
        List<Map<String,Object>>listitem=new ArrayList<Map<String,Object>>();

        //HashMap是一個散列表,存儲的值是對(key-value)映射,實現了Map接口(這里需要參考一下Java中的概念)
        Map<String,Object> map=new HashMap<String,Object>();
        //向HashMap中添加從MainActivity傳遞的數據
        map.put("img",R.mipmap.ic_launcher);
        map.put("name",bundle.getString("name"));
        map.put("academy",bundle.getString("academy"));
        map.put("major",bundle.getString("major"));
        //將上面的元素放到ArrayList中儲存起來
        listitem.add(map);
        //將SimpleAdapter初始化,導入上文的ArrayList
        SimpleAdapter myAdapter = new SimpleAdapter(getApplicationContext(), listitem, R.layout.item, new String[]{"img", "name","academy","major"}, new int[]{R.id.img_item, R.id.name_item,R.id.academy_item,R.id.major_item});
        ListView listView = (ListView) findViewById(R.id.listview);
        //設置SimpleAdapter到activity_show的ListView中
        listView.setAdapter(myAdapter);

        //返回到注冊界面的按鈕
        Button button = findViewById(R.id.back);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ShowActivity.this,MainActivity.class);
                startActivity(intent);
            }
        });
    }
}

這樣就可以實現學生注冊,跳轉至listview列表中的場景。后面更新會繼續增加。本文先寫到這里,懇請大家指正。

參考文檔
https://blog.csdn.net/qq_45968259/article/details/109434702

官方文檔:https://developer.android.google.cn/docs


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM