当前位置:首页 » 安卓系统 » android多级联动

android多级联动

发布时间: 2022-11-13 10:50:19

❶ 怎样使用pickerview来实现地址菜单的三级联动效果

现在很多的app,尤其是电商类的app在添加地址功能里面一般都会使用地址的三级联动,那么它是怎么实现的呢?其实很简单,现在简单的介绍一下使用第三方的依赖来实现三级联动的效果.
1.开始编写
1).在mole的build.gradle文件中的dependencies节点里面添加这样一行代码引入依赖
[html] view plain
compile 'com.bigkoo:pickerview:2.0.8'
2).项目的目录结构
包括assets资产目录,三个类文件,分别是activity的代码逻辑类,省份的实体类以及获取省份信息json字符串的工具类.
3)实体类编写如下:
[java] view plain
public class AddressBean {
public String name;
public AddressBean(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPickerViewText() {
//这里是固定写法,依赖库会根据集合内容使用反射显示文本到省份栏的文本框中
return this.name;
}
@Override
public String toString() {
return "AddressBean{" +
"name='" + name + '\'' +
'}';
}
}
4).获取json字符串的工具类代码
[html] view plain
/**
* Created by yangtao on 2016/12/11.
* 从资产目录中获取json字符串
*/
public class JsonUtils {
public static String getJsonString(Context context,String name){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
AssetManager am = context.getAssets();
try {
InputStream inputStream = am.open(name);
byte[] buffer = new byte[1024];
int len =0;
while((len = inputStream.read(buffer)) != -1){
baos.write(buffer,0,len);
}
} catch (IOException e) {
e.printStackTrace();
}
return baos.toString();
}
}
5)MainActivity中的代码实现
[java] view plain
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.bigkoo.pickerview.OptionsPickerView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private TextView tv_address;
private ArrayList<AddressBean> provinceList = new ArrayList<>();//创建存放省份实体类的集合
private ArrayList<String> cities ;//创建存放城市名称集合
private ArrayList<List<String>> citiesList= new ArrayList<>();//创建存放城市名称集合的集合
private ArrayList<String> areas ;//创建存放区县名称的集合
private ArrayList<List<String>> areasList ;//创建存放区县名称集合的集合
private ArrayList<List<List<String>>> areasListsList = new ArrayList<>();//创建存放区县集合的集合的集合
private OptionsPickerView mPvOptions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_address = (TextView) findViewById(R.id.tv_address);
//获取json字符串,用来解析以获取集合
String jsonString = JsonUtils.getJsonString(MainActivity.this,
"province_data.json");
//解析json字符串,向各级集合中添加元素
parseJson(jsonString);
mPvOptions = new OptionsPickerView(this);
//设置三级联动的效果
mPvOptions.setPicker(provinceList,citiesList,areasListsList,true);
//设置可以循环滚动,true表示这一栏可以循环,false表示不可以循环
mPvOptions.setCyclic(true,false,false);
//设置默认选中的位置
mPvOptions.setSelectOptions(0,0,0);
mPvOptions.setOnoptionsSelectListener(new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3) {
//返回的分别是三个级别的选中位置
String city = provinceList.get(options1).getPickerViewText();
String address;
// 如果是直辖市或者特别行政区只设置市和区/县
if ("北京市".equals(city) || "上海市".equals(city) || "天津市".equals(city) || "重庆市".equals(city) || "澳门".equals(city) || "香港".equals(city)) {
address = provinceList.get(options1).getPickerViewText()
+ " " + areasListsList.get(options1).get(option2).get(options3);
} else {
address = provinceList.get(options1).getPickerViewText()
+ " " + citiesList.get(options1).get(option2)
+ " " + areasListsList.get(options1).get(option2).get(options3);
}
tv_address.setText(address);
Toast.makeText(MainActivity.this,"我被点击了",Toast.LENGTH_LONG).show();
}
});
//点击文本框的时候,显示地址选择框
tv_address.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mPvOptions.show();
}
});
}
//解析获得的json字符串,放在各个集合中
private void parseJson(String json){
try {
//得到一个数组类型的json对象
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {//对数组进行遍历得到每一个jsonobject对象
JSONObject provinceObject = (JSONObject) jsonArray.get(i);
String provinceName = provinceObject.getString("name");//得到省份的名字
provinceList.add(new AddressBean(provinceName));//向集合里面添加元素
JSONArray cityArray = provinceObject.optJSONArray("city");
cities = new ArrayList<>();//创建存放城市名称集合
areasList = new ArrayList<>();//创建存放区县名称的集合的集合
for (int j = 0; j < cityArray.length(); j++) {//遍历每个省份集合下的城市列表
JSONObject cityObject = (JSONObject) cityArray.get(j);
String cityName = cityObject.getString("name");
cities.add(cityName);//向集合里面添加元素
JSONArray areaArray = cityObject.optJSONArray("area");
areas = new ArrayList<>();//创建存放区县名称的集合
for (int k = 0; k < areaArray.length(); k++) {
String areaName = areaArray.getString(k);
areas.add(areaName);
}
areasList.add(areas);
}
citiesList.add(cities);
areasListsList.add(areasList);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}

❷ android如何动态更新二级联动spinner

spinner有一个setSelection(),将spinner设为全局变量后用spinner.setSelection(GestureConstant.FILE_GESTURE, false);就可以了。
贴一部分代码,不完整。
Activity
[java] view plain
Intent fileIntent = new Intent(FileManager.this,
CreateGestureActivity.class);
fileIntent.putExtra("file", "file");
startActivity(fileIntent);

❸ 想做一个android 省市县三级联动,数据是从接口读取,怎么做

以前做过,数据是在本地xml里面取的: 上面是省市区的xml数据网盘地址。 如果要做成从服务器取,那么就一次性取下来,然后还是一样的流程。 如果你想选择省再去取对应的市,那么就要传省的id去获取对应的市,这时候就要有等待框,可能用户体验差一点。

❹ 关于android中spinner三级联动的问题

http://blog.csdn.net/jdsjlzx/article/details/41789835
这里的一些信息希望可译帮到你

❺ Android上这种布局和联动的滑动效果是怎么做到的

CoordinatorLayout+AppBar,desgin包里的。正确的做法就是自己处理滑动事件。建议先了解一下View的事件传递机制。这个问题我遇到过,写了个viewgroup解决这个问题。scrollview里面放viewpager,布局的时候手动设置viewpager的高度。viewpager的指示器做两个,一个放scrollview里面,一个放scrollview外面。
老版本的网易云音乐 曾经用过这个效果。以前实现过这样的效果。ViewPager顶部有一个Layout。下面ViewPager中的每个ListView有一个空白的Header当前页面上下滑动的时候动态的根据Y值去改变顶部的Layout的Y值。当页面左右滑动完成之后, 根据当前ListView的Y值.重新丝滑的改变顶部Layout的Y值。现在有个开源项目也能实现类似的效果。

❻ android 怎样用scrollowview嵌套gridview来实现多级联动

GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片等内容,比如实现九宫格图,用GridView是首选,也是最简单的。主要用于设置Adapter。
1.GridView常用的XML属性
属性名称 描述
android:columnWidth 设置列的宽度。
android:gravity 设置此组件中的内容在组件中的位置。可选的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical可以多选,用“|”分开。
android:horizontalSpacing 两列之间的间距。
android:numColumns 设置列数。
android:stretchMode 缩放模式。
android:verticalSpacing 两行之间的间距。

2.实例1
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<GridView
android:id="@+id/GridView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:columnWidth="90dp"
android:numColumns="3"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
</LinearLayout>

❼ 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" >

❽ android中读取数据库内容到spinner 并实现二级联动,出现

你的get方法返回值不是map<String,Integer>类型,发代码上来看下 就get方法的

❾ android省市区多级联动的布局怎么实现的

使用相对布局,然后使用控件spinner:
<Spinner
android:id="@+id/spinner03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/spinner02"
/>

❿ android中spinner如何实现省市二级联动

Androidspinner实现省市二级联动,需要自定义adpter,将数据源绑定到adpter,当点击省时,触发自定义响应事件,改变市,示例如下:

{
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){

}

});
}
}
热点内容
仓单加密 发布:2025-03-04 15:54:45 浏览:899
java架构师面试 发布:2025-03-04 15:54:05 浏览:967
安卓手机如何取饿了么会员 发布:2025-03-04 15:53:28 浏览:184
c语言int和double 发布:2025-03-04 15:38:04 浏览:443
手游编程入门 发布:2025-03-04 15:30:55 浏览:899
android进程被杀 发布:2025-03-04 15:30:52 浏览:394
火车的无线密码都是什么 发布:2025-03-04 15:08:42 浏览:455
存单锁住后如何重置密码 发布:2025-03-04 15:08:17 浏览:569
sqlintchar 发布:2025-03-04 14:55:21 浏览:483
切水泥解压 发布:2025-03-04 14:41:55 浏览:501