android省市区联动
① android中spinner如何实现省市二级联动
Androidspinner实现省市二级联动,需要自定义adpter,将数据源绑定到adpter,当点击省时,触发自定义响应事件,改变市,示例如下:
java">{
privateTextViewtextView;
privateSpinnerprovince;
privateSpinnercity;
/**.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//String[]provinces=newString[]{"-省份-","河北省","山西省","北京"};
textView=(TextView)this.findViewById(R.id.textView);
province=(Spinner)this.findViewById(R.id.province);
city=(Spinner)this.findViewById(R.id.city);
//(处理省的显示)
//将可选内容与ArrayAdapter的连接(从资源数组文件中获取数据)
ArrayAdapter<CharSequence>adapter=
ArrayAdapter.createFromResource(this,R.array.province,android.R.layout.simple_spinner_item);
//newArrayAdapter<String>(this,android.R.layout.simple_spinner_item,provinces);
//设置下拉列表的风格
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//将数据绑定到Spinner视图上
province.setAdapter(adapter);
//添加条目被选中监听器
province.setOnItemSelectedListener(newAdapterView.OnItemSelectedListener(){
@Override
publicvoidonItemSelected(AdapterView<?>parent,Viewview,intposition,longid){
//parent既是province对象
Spinnerspinner=(Spinner)parent;
Stringpro=(String)spinner.getItemAtPosition(position);
//(处理省的市的显示)
//将默认值与ArrayAdapter连接(从资源数组文件中获取数据)
ArrayAdapter<CharSequence>cityAdapter=ArrayAdapter.createFromResource
(MainActivity.this,R.array.citydefault,android.R.layout.simple_spinner_item);
//newArrayAdapter<CharSequence>
//(MainActivity.this,android.R.layout.simple_spinner_item,cities);
//获取所在省含有哪些市(从资源数组文件中获取数据)
if(pro.equals("河北省")){
cityAdapter=ArrayAdapter.createFromResource
(MainActivity.this,R.array.hb,android.R.layout.simple_spinner_item);
}elseif(pro.equals("北京市")){
cityAdapter=ArrayAdapter.createFromResource
(MainActivity.this,R.array.bj,android.R.layout.simple_spinner_item);
}elseif(pro.equals("山西省")){
cityAdapter=ArrayAdapter.createFromResource
(MainActivity.this,R.array.shx,android.R.layout.simple_spinner_item);
}
//绑定数据到Spinner(City)上
city.setAdapter(cityAdapter);
}
@Override
publicvoidonNothingSelected(AdapterView<?>parent){
}
});
}
}
② Android Spinner实现省市二级联动效果
Spinner1,在setOnItemSelectedListener里查询数据,并将数据给
Spinner2,再弹出选择不就实现了吗
③ 关于android中spinner三级联动的问题
http://blog.csdn.net/jdsjlzx/article/details/41789835
这里的一些信息希望可译帮到你
④ android中省级联动一般用什么控件实现
Spinner上实现省市区三级联动,话不多说了
城市信息我将他放在strings.xml文件中,具体就不给出了,信息太大了
主xml文件部分代码如下:
[java] view plainprint?
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android=" "
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusableInTouchMode="false" >
<TableLayout
android:id="@+id/tableLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="20px"
android:stretchColumns="1" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="10px"
android:="false" >
<TextView
android:id="@+id/province_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="省份:"
>
</TextView>
<Spinner
android:id="@+id/province_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</Spinner>
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="10px"
android:="false" >
<TextView
android:id="@+id/city_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="城市:" >
</TextView>
<Spinner
android:id="@+id/city_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</Spinner>
</TableRow>
<TableRow
android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="10px"
android:="false" >
<TextView
android:id="@+id/county_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="县城镇:"
>
</TextView>
<Spinner
android:id="@+id/county_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</Spinner>
</TableRow>
<EditText
android:id="@+id/display_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusableInTouchMode="false"
android:hint="输出结果"
android:paddingTop="10px" >
</EditText>
</TableLayout>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android=" "
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusableInTouchMode="false" >
⑤ 省市区 地址联动 数据怎么创建
1、在做这个小项目前的准备工作:
1.1、分析:
由于省、市、县城(区)这些数据是存储到了Mysql数据库中的,我们要通过后台servlet获取数据库中的数据,然后再通过转发或者重定向的方式将数据呈现到前台页面中。
1.2、需要导入的jar包有:
mysql驱动包:mysql-connector-Java-5.1.7-bin.jar
c3p0数据库连接池:c3p0-0.9.2.1.jar、mysql-connector-java-5.1.7-bin.jar(c3p0依赖包)
前台c标签(需要通过遍历的方式呈现——c:forEach):jstl-1.0.2.jar、standard-1.0.1.jar(jstl依赖包)
将集合或者数组转换成json数据格式(Jackson包):jackson-annotations-2.2.1.jar、jackson-core-2.2.1.jar、jackson-databind-2.2.1.jar
前台页面需要用到jQuery,故还需要导入jquery-1.7.2.js库文件
1.3、该小项目用到的技术:
jdbc的知识、servlet的知识、jquery的知识、Ajax的知识(局部刷新)、标签的知识、EL表达式的知识、JSP的知识
2、开发过程:
2.1、准备数据源
创建一个数据库,命名为thereaction并创建三个表——province(省)、city(市)、county(县/区)
2.2后台开发
创建三个Javabean分别是Province、City、County。(由于太过简单,这里就不粘代码了)
创建Java类和c3p0连接池实现与数据库的连接:DAO.java(实现获取数据库数据的功能)、jdbctools.java(实现获取数据库连接、释放连接的功能)、c3p0-config.xml
jdbctools.java代码如下:
[java] view plain
package com.xiaojie.;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class Jdbctools {
private static DataSource ds=null;
//数据库连接池应只被初始化一次
static{
ds=new ComboPooledDataSource("helloc3p0");
}
//获取数据库连接
public static Connection getConnection() throws ClassNotFoundException, SQLException, IOException{
return ds.getConnection();
}
public static void shifanglianjie(Connection ct, PreparedStatement ps,ResultSet rs) {
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ct!=null){
try {
ct.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
DAO.java的代码如下
[java] view plain
package com.xiaojie.;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.xiaojie.beans.City;
import com.xiaojie.beans.County;
import com.xiaojie.beans.Province;
public class DAO {
public List<Province> getprovince(String sql ,Object...args) throws ClassNotFoundException, SQLException, IOException{
List<Province> provinces=new ArrayList<Province>();
//准备去查数据库
Connection ct=null;
ct=Jdbctools.getConnection();
System.out.println("获取到数据库的连接了");
PreparedStatement ps=null;
ResultSet rs=null;
ps=ct.prepareStatement(sql);
for(int i=0;i<args.length;i++){
ps.setObject(i+1, args[i]);
}
rs=ps.executeQuery();
while(rs.next()){
provinces.add(new Province(rs.getInt("province_id"),rs.getString("province_name")));
}
Jdbctools.shifanglianjie(ct, ps, rs);
return provinces;
}
public List<City> getcity(String sql ,Object...args) throws SQLException, ClassNotFoundException, IOException{
List<City> cities=new ArrayList<City>();
//准备去查数据库
Jdbctools jt=new Jdbctools();
Connection ct=null;
ct=jt.getConnection();
PreparedStatement ps=null;
ResultSet rs=null;
ps=ct.prepareStatement(sql);
for(int i=0;i<args.length;i++){
ps.setObject(i+1, args[i]);
}
rs=ps.executeQuery();
while(rs.next()){
cities.add(new City(rs.getInt("city_id"),rs.getString("city_name")));
}
jt.shifanglianjie(ct, ps, rs);
return cities;
}
public List<County> getcounty(String sql,Object...args ) throws SQLException, ClassNotFoundException, IOException{
List<County> counties=new ArrayList<County>();
//准备去查数据库
Jdbctools jt=new Jdbctools();
Connection ct=null;
ct=jt.getConnection();
PreparedStatement ps=null;
ResultSet rs=null;
ps=ct.prepareStatement(sql);
for(int i=0;i<args.length;i++){
ps.setObject(i+1, args[i]);
}
rs=ps.executeQuery();
while(rs.next()){
counties.add(new County(rs.getInt("county_id"),rs.getString("county_name")));
}
jt.shifanglianjie(ct, ps, rs);
return counties;
}
}
c3p0-config.xml的代码如下:
[html] view plain
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<named-config name="helloc3p0">
<!-- 连接数据源的基本属性 -->
<property name="user">root</property>
<property name="password"></property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///thereaction</property>
<!-- 若数据库中连接数不足时,一次向数据库服务器申请多少个连接 -->
<property name="acquireIncrement">5</property>
<!-- 初始化数据库连接池时连接的数量 -->
<property name="initialPoolSize">5</property>
<!-- 数据库连接池中的最小的数据库连接数 -->
<property name="minPoolSize">5</property>
<!-- 数据库连接池中的最大的数据库连接数 -->
<property name="maxPoolSize">10</property>
<!-- c3p0数据库连接可以维护的statement的个数 -->
<property name="maxStatements">20</property>
<!-- 每个连接同时可以使用的statement对象的个数 -->
<property name="maxStatementsPerConnection">5</property>
</named-config>
</c3p0-config>
创建servlet.java 文件
[java] view plain
package com.xiaojie.servlet;
import java.io.IOException;
import java.lang.reflect.Method;
import java.sql.SQLException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xiaojie.beans.City;
import com.xiaojie.beans.County;
import com.xiaojie.beans.Province;
import com.xiaojie..DAO;
/**
* Servlet implementation class ThreeactiondServlet
*/
@WebServlet("/threeactiondServlet")
public class ThreeactiondServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String methodname=request.getParameter("method");
try {
Method method=getClass().getDeclaredMethod(methodname,HttpServletRequest.class,HttpServletResponse.class);
method.invoke(this, request,response);//调用各自的方法
} catch (Exception e) {
e.printStackTrace();
}
}
private DAO =new DAO();
protected void province(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ClassNotFoundException, SQLException {
System.out.println("province的servlet进入了");
String sql="select province_id,province_name from province";
List<Province> provinces=.getprovince(sql);
request.setAttribute("provinces", provinces);
System.out.println(provinces);
//注意:这里不能用重定向的形式,因为我们好不容易在request请求域中存储了省的信息,目的是在前台页面中能够从请求域中获取到我们存在数据库中的值
//故这里只能用转发的方式
request.getRequestDispatcher("/index2.jsp").forward(request, response);
}
protected void city(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ClassNotFoundException, SQLException {
System.out.println("city的servlet进入了");
String province_id=request.getParameter("province_id");
String sql="select city_id,city_name from city where province_id=?";
List<City> cities=.getcity(sql,Integer.parseInt(province_id));
ObjectMapper mapper=new ObjectMapper();
String result=mapper.writeValueAsString(cities);
System.out.println(result);
response.setContentType("text/javascript");
response.getWriter().print(result);
}
protected void county(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ClassNotFoundException, SQLException {
System.out.println("county的servlet进入了");
String city_id=request.getParameter("city_id");
String sql="select county_id,county_name from county where city_id=?";
List<County> counties=.getcounty(sql,Integer.parseInt(city_id));
ObjectMapper mapper=new ObjectMapper();
String result=mapper.writeValueAsString(counties);
System.out.println(result);
response.setContentType("text/javascript");
response.getWriter().print(result);
}
}
⑥ 省市区三级联动如何解决代码初始化赋值不被覆盖的问题
省市区三级联动解决代码初始化赋值不被覆盖的问题,可能是因为是的事情,本机去的只是想你们的事。
⑦ 想做一个android 省市县三级联动,数据是从接口读取,怎么做
以前做过,数据是在本地xml里面取的: 上面是省市区的xml数据网盘地址。 如果要做成从服务器取,那么就一次性取下来,然后还是一样的流程。 如果你想选择省再去取对应的市,那么就要传省的id去获取对应的市,这时候就要有等待框,可能用户体验差一点。
⑧ 省市区,三级联动,修改的时候,怎样,获取相应的值
前端AJAX联动方式
前端可以传一个唯一值到后台,异步获取相对应的下级的数据。
⑨ Android对话框选择三级联动城市,求DEMO
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="8dp">
<Spinner
android:id="@+id/spin_province"
android:layout_width="80dp"
android:layout_height="wrap_content"/>
<Spinner
android:id="@+id/spin_city"
android:layout_width="112dp"
android:layout_height="wrap_content"/>
<Spinner
android:id="@+id/spin_county"
android:layout_width="100dp"
android:layout_height="wrap_content"/>
</LinearLayout>
packagecom.example.android.demo.spinner;
importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.view.View;
importandroid.widget.AdapterView;
importandroid.widget.ArrayAdapter;
importandroid.widget.Spinner;
{
privateSpinnerprovinceSpinner=null;//省级(省、直辖市)
privateSpinnercitySpinner=null;//地级市
privateSpinnercountySpinner=null;//县级(区、县、县级市)
ArrayAdapter<String>provinceAdapter=null;//省级适配器
ArrayAdapter<String>cityAdapter=null;//地级适配器
ArrayAdapter<String>countyAdapter=null;//县级适配器
staticintprovincePosition=3;
//省级选项值
privateString[]province=newString[]{"北京","上海","天津","广东"};//,"重庆","黑龙江","江苏","山东","浙江","香港","澳门"};
//地级选项值
privateString[][]city=newString[][]
{
{"东城区","西城区","崇文区","宣武区","朝阳区","海淀区","丰台区","石景山区","门头沟区",
"房山区","通州区","顺义区","大兴区","昌平区","平谷区","怀柔区","密云县",
"延庆县"},
{"长宁区","静安区","普陀区","闸北区","虹口区"},
{"和平区","河东区","河西区","南开区","河北区","红桥区","塘沽区","汉沽区","大港区",
"东丽区"},
{"广州","深圳","韶关"//,"珠海","汕头","佛山","湛江","肇庆","江门","茂名","惠州","梅州",
//"汕尾","河源","阳江","清远","东莞","中山","潮州","揭阳","云浮"
}
};
//县级选项值
privateString[][][]county=newString[][][]
{
{//北京
{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},
{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"}
},
{//上海
{"无"},{"无"},{"无"},{"无"},{"无"}
},
{//天津
{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"}
},
{//广东
{"海珠区","荔湾区","越秀区","白云区","萝岗区","天河区","黄埔区","花都区","从化市","增城市","番禺区","南沙区"},//广州
{"宝安区","福田区","龙岗区","罗湖区","南山区","盐田区"},//深圳
{"武江区","浈江区","曲江区","乐昌市","南雄市","始兴县","仁化县","翁源县","新丰县","乳源县"}//韶关
}
};
@Override
protectedvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setSpinner();
}
/*
*设置下拉框
*/
privatevoidsetSpinner()
{
provinceSpinner=(Spinner)findViewById(R.id.spin_province);
citySpinner=(Spinner)findViewById(R.id.spin_city);
countySpinner=(Spinner)findViewById(R.id.spin_county);
//绑定适配器和值
provinceAdapter=newArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_spinner_item,province);
provinceSpinner.setAdapter(provinceAdapter);
provinceSpinner.setSelection(3,true);//设置默认选中项,此处为默认选中第4个值
cityAdapter=newArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_spinner_item,city[3]);
citySpinner.setAdapter(cityAdapter);
citySpinner.setSelection(0,true);//默认选中第0个
countyAdapter=newArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_spinner_item,county[3][0]);
countySpinner.setAdapter(countyAdapter);
countySpinner.setSelection(0,true);
//省级下拉框监听
provinceSpinner.setOnItemSelectedListener(newAdapterView.OnItemSelectedListener()
{
//表示选项被改变的时候触发此方法,主要实现办法:动态改变地级适配器的绑定值
@Override
publicvoidonItemSelected(AdapterView<?>arg0,Viewarg1,intposition,longarg3)
{
//position为当前省级选中的值的序号
//将地级适配器的值改变为city[position]中的值
cityAdapter=newArrayAdapter<String>(
MainActivity.this,android.R.layout.simple_spinner_item,city[position]);
//设置二级下拉列表的选项内容适配器
citySpinner.setAdapter(cityAdapter);
provincePosition=position;//记录当前省级序号,留给下面修改县级适配器时用
}
@Override
publicvoidonNothingSelected(AdapterView<?>arg0)
{
}
});
//地级下拉监听
citySpinner.setOnItemSelectedListener(newAdapterView.OnItemSelectedListener()
{
@Override
publicvoidonItemSelected(AdapterView<?>arg0,Viewarg1,
intposition,longarg3)
{
countyAdapter=newArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_spinner_item,county[provincePosition][position]);
countySpinner.setAdapter(countyAdapter);
}
@Override
publicvoidonNothingSelected(AdapterView<?>arg0)
{
}
});
}
}
要获取下拉框spinner中选中的值,用下面这方法就OK了
provinceSpinner.getSelectedItem().toString();
citySpinner.getSelectedItem().toString();
countySpinner.getSelectedItem().toString();
⑩ 如何实现android 三个ListView实现类似省市区的联动效果
如何在Android设备旋转时暂存数据以保护当前的交互状态 总结了以下几种情况:
设备旋转时保存Activity的交互状态: onSaveInstanceState();
设备旋转时保存Fragment的交互状态: setRetainInstance(true);
设备旋转时保存WebView的数据: android:configChanges="keyboardHidden|orientation|screenSize";
设备旋转时保存在自定义View中绘制的图形。
如果Fragment不包含WebView,只是简单的UI View,像是TextView, Button, CheckBox, ImageView... 不建议使用setRetainInstance方法,只需要记住当前fragment的index,然后在设备旋转后根据数据重新实例化一个fragment。因为不包含大量数据,旋转的过程中几乎可以用“无缝切换”来形容。
如果包含WebView还是采用针对WebView的方法(题主的情况)。所以要看情况而定。