觀前提示:本文主要講的樣例是自己的課堂作業,剛起步很多都不會,其中不專業的部分請見諒。此外,本文繼上一篇文章的樣式,主要着重在代碼實現方面
配置環境:Windows 10平台下Android Studio 2021.1.1 Patch1,測試手機是Nexus 6(Android11)配置見我的第一篇博客
目錄:
1.1下拉框二級聯動
1.1下拉框二級聯動
平常生活之中,二級聯動乃至多級聯動是十分常見的。從本樣例中的學院--專業,大到省--市--區的多級聯動。本文用的算是一種死板的方法,我后面會繼續改進(大概)。下面直接上代碼:
=寫於2022-3-08===
項目架構如下:
本次二級聯動所用到的僅僅是紅框標注的部分。(也可以看上一個博客: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>
顯示效果如下:
然后在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>
效果:
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列表中的場景。后面更新會繼續增加。本文先寫到這里,懇請大家指正。