Android利用Spinner从数据库中读取数据并实现2级互动
来源:互联网 发布:尼康官方调焦软件 编辑:程序博客网 时间:2024/06/04 06:33
以前学习Java EE的时候,经常会遇到一些下拉表单进行联动的实例。
例子:假如一个公司有三个部门,括号里面是职位
人力资源部(员工关系主管,招聘主管 )
财务部(财务总监、财务部经理、审计主管)
生产技术部(程序员,设计师,架构师)
我们将做个两级联动的spinner,当我第一级选择不同的部门,第二级将显示不同的职位
SQLiteOpenHelper类:
package org.jian.database;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DBHelper extends SQLiteOpenHelper { private static final String DB_NAME = "martin.db" ; private static final int VERSION = 3 ; SQLiteDatabase db ; private String job_sql = "CREATE TABLE IF NOT EXISTS job(" + "_id INTEGER PRIMARY KEY ," + "jobname VARCHAR(20) ," + "did INTEGER" + ")" ; private String dept_sql = "CREATE TABLE IF NOT EXISTS dept(" + "_id INTEGER PRIMARY KEY ," + "deptname VARCHAR(20)" + ")" ; public DBHelper(Context context) { super(context, DB_NAME, null, VERSION); } @Override public void onCreate(SQLiteDatabase db) { this.db = db ; db.execSQL(job_sql) ; db.execSQL(dept_sql) ; } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
用sql插入数据(在sqlite里,用adb进入):
INSERT INTO job VALUES(null ,"员工关系主管" , 1) ;INSERT INTO job VALUES(null ,"招聘主管 " , 1) ;INSERT INTO job VALUES(null ,"财务总监" , 2) ;INSERT INTO job VALUES(null ,"财务部经理" , 2) ;INSERT INTO job VALUES(null ,"审计主管" , 2) ;INSERT INTO job VALUES(null ,"程序员" , 3) ;INSERT INTO job VALUES(null ,"设计师" , 3) ;INSERT INTO job VALUES(null ,"架构师" , 3) ;INSERT INTO dept VALUES(null ,"人力资源部" ) ;INSERT INTO dept VALUES(null ,"财务部" ) ;INSERT INTO dept VALUES(null ,"生产技术部" ) ;
处理数据的类:
package org.jian.service;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.jian.database.DBHelper;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;public class Database { private DBHelper dbHelper; public Database(Context context) { dbHelper = new DBHelper(context); } /** * 查询数据库,返回一个Map 这个Map包括 1,spinner需要显示的字符串,以及其所组成的map 2,spinner需要显示的字符串 * * @return */ public Map<Integer, List<?>> getDepts() { String sql = "SELECT _id, deptname FROM dept"; //获取部门Id号与部门的名称 SQLiteDatabase db = null; Cursor c = null; Map<Integer, List<?>> DeptData = new HashMap<Integer, List<?>>(); try { db = dbHelper.getWritableDatabase(); // 获取数据库 c = db.rawQuery(sql, null); List<Map<String, Integer>> collegeList1 = new ArrayList<Map<String, Integer>>(); List<String> collegeList2 = new ArrayList<String>(); while (c.moveToNext()) { Map<String, Integer> provinceMap = new HashMap<String, Integer>(); // 这个HashMap主要是用来白村学院的信息以及他的id String name = new String(c.getBlob(1), "GBK"); provinceMap.put(name, c.getInt(0)); collegeList1.add(provinceMap); // 保存这个Map collegeList2.add(name); // 保存这个名字的列表 } DeptData.put(0, collegeList1); DeptData.put(1, collegeList2); } catch (Exception e) { e.printStackTrace(); } finally { if (c != null) { c.close(); } if (db != null) { db.close(); } } return DeptData; } /** * 返回一个List * 包含job的字符串所组成的数组 * @param id * @return */ public List<String> getJobById(int id) { String sql = "SELECT jobname FROM job WHERE did = " + id; SQLiteDatabase db = null; Cursor c = null; List<String> jobList = null; try { db = dbHelper.getWritableDatabase(); c = db.rawQuery(sql, null); jobList = new ArrayList<String>(); while (c.moveToNext()) { String jobName = new String(c.getBlob(0),"GBK") ; //解决乱码 jobList.add(jobName); } } catch (Exception ex) { ex.printStackTrace(); } finally { if (c != null) { c.close(); } if (db != null) { db.close(); } } return jobList; }}
界面设计XML:spinner.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请选择你的部门" /> <Spinner android:id="@+id/dept" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请选择你的职位" /> <Spinner android:id="@+id/job" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
Activity类:
package org.jian.activity;import java.util.ArrayList;import java.util.List;import java.util.Map;import org.jian.service.Database;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemSelectedListener;import android.widget.ArrayAdapter;import android.widget.Spinner;import com.example.spinner.R;public class MainActivity extends Activity { List deptList = new ArrayList(); List deptData = new ArrayList(); List jobList = new ArrayList(); Spinner job; Spinner dept; Database db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.spanner); job = (Spinner) findViewById(R.id.job); dept = (Spinner) findViewById(R.id.dept); db = new Database(getApplicationContext()); Map<Integer, List<?>> data = database.getDepts();// 得到数据库数据 deptList = data.get(1); deptData = data.get(0); ArrayAdapter deptAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_spinner_item, deptList); deptAdapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 样式 dept.setAdapter(deptAdapter); dept.setOnItemSelectedListener(itemSelectedListener); } private OnItemSelectedListener itemSelectedListener = new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Spinner spdept = (Spinner) parent; String seldept = (String) spdept.getItemAtPosition(position); ArrayAdapter jobAdapter = null; Map<String, Integer> data = (Map<String, Integer>) deptData .get(position);// 根据id,返回本门号的信息 int pid = data.get(seldept);// 得到部门号的id List<String> jobList = db.getJobById(pid); // 根据id查得工作类型的一个List jobAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_spinner_item, jobList); jobAdapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); job.setAdapter(jobAdapter); job.setOnItemSelectedListener(jobSelectedListener); } @Override public void onNothingSelected(AdapterView<?> parent) { } }; String selectedJob = null; private OnItemSelectedListener jobSelectedListener = new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Spinner spjob = (Spinner) parent; selectedJob = (String) spjob.getItemAtPosition(position); } @Override public void onNothingSelected(AdapterView<?> parent) { } };}
运行结果:
当我选择部门为:财务部时:
工作职位出现的为:
0 0
- Android利用Spinner从数据库中读取数据并实现2级互动
- Spinner 从数据库中读取数据并实现2级互动
- spinner 从数据库读取数据并实现二级联动。 .
- 从数据库读取数据放入Spinner
- android中TextView中文字从数据库中读取并实现换行
- 网页实现从数据库读取数据并简单分页
- C#从数据库中读取二进制数据,并显示图片
- 从Excel中读取数据并导入数据库
- PHP从数据库中读取数据并打印
- [C#] 从数据库读取数据并输出
- JMeter 参数化之利用JDBC Connection Configuration从数据库读取数据并关联变量
- 参数化之利用JDBC从数据库读取数据并关联变量
- 从cmos中读取数据并显示
- 从资源库中读取数据 并播放
- Android中Spinner下拉列表(使用自定义Adapter实现,显示数据取自联系人数据库)
- Android 从FrameBuffer中读取界面数据实现截图
- 利用jxl包从sqlserver数据库中读取数据存到Excel中
- 从数据库中读取数据,并写入xml文件中(dom4j)
- FS2410 光盘资料 idea6410 光盘资料 EM-SAM9G45 光盘资料
- C++_运算符重载
- java面试题之 使用两个int翻转字符串
- Throwable中的toString方法
- 20060811-Discrete cosine transforms, JPEG, and software compatibility
- Android利用Spinner从数据库中读取数据并实现2级互动
- 无线网络学习笔记(1)
- Android Animation与ListView结合的滑动效果
- PHP中延迟静态绑定机制
- 利用数据结构栈求解迷宫问题
- 利用替换变量提高Oracle交互性(define)
- S_hui工作室
- POJ 1379 模拟退火法
- Android simple implementation Dropium - iOS7 Login screen