Android学习之下拉列表

下拉列表

在Android中,官方为我们提供了用来实现下拉列表的组件Spinner,我们使用这个组件就可以完成下拉列表的创建。

下拉列表的两种实现方式

静态创建就是在布局文件中使用 android:entries属性指定下拉列表数据的存放文件,这样就不需要在代码中进行任何操作,即可创建下拉列表。

<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"
    tools:context=".TestActivity2"
    android:orientation="vertical">

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/spinner1"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="分割"/>

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

spinner1.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="spinner">
        <item>北京</item>
        <item>上海</item>
        <item>深圳</item>
    </string-array>

</resources>

动态创建就是在代码中指定下拉列表的数据。data_list是存放数据的列表。

/**
     * 动态创建下拉列表
     */
    public void createSpinner2() {
        spinner = findViewById(R.id.spinner2);

        data_list = new ArrayList<>();
        data_list.add("北京");
        data_list.add("上海");
        data_list.add("广州");
        data_list.add("深圳");

        //适配器
        arr_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,data_list);
        //设置样式
        arr_adapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
        //加载适配器
        spinner.setAdapter(arr_adapter);
    }

使用下拉列表实现多级联动

多级联动实现的要点在于选择了第一级以后,需要自动在第二级设置出对应的数据。
在布局文件中添加以下代码

 <TextView
        android:id="@+id/spinner3"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:text="以下是三级联动"/>

    <Spinner
        android:id="@+id/spinner4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Spinner
        android:id="@+id/spinner5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    /**
     * 二级联动
     */
    public void createSpinner3() {
        spinner4 = findViewById(R.id.spinner4);
        spinner5 = findViewById(R.id.spinner5);


        ArrayList<String> data4 = new ArrayList<>();
        data4.add("北京");
        data4.add("上海");
        data4.add("深圳");
		
		//设置第一级的数据
        adapter4 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,data4);
        adapter4.setDropDownViewResource(android.R.layout.simple_spinner_item);
        spinner4.setAdapter(adapter4);

		//给第一级设置选项选中事件
        spinner4.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Log.d(TAG, "onItemClick: " + adapter4.getItem(position));
                Log.d(TAG, "onItemClick: " + data4.get(position));
               //判断被选中的是第一级的哪个数据,然后设置对应的数据
                if ("北京".equals(data4.get(position))) {
                	//将数据绑定到选中的选项上
                    adapter5 = ArrayAdapter.createFromResource(TestActivity2.this, R.array.bj, android.R.layout.simple_spinner_item);
                    spinner5.setAdapter(adapter5);
                } else if ("上海".equals(data4.get(position))) {
                    adapter5 = ArrayAdapter.createFromResource(TestActivity2.this, R.array.sh, android.R.layout.simple_spinner_item);
                    spinner5.setAdapter(adapter5);
                } else {
                    adapter5 = ArrayAdapter.createFromResource(TestActivity2.this, R.array.sz, android.R.layout.simple_spinner_item);
                    spinner5.setAdapter(adapter5);
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

sz.xml文件,此文件在values目录下创建。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="sz">
        <item>南山区</item>
        <item>龙岗区</item>
        <item>福田区</item>
    </string-array>
</resources>

bj.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="bj">
        <item>大兴区</item>
        <item>怀柔区</item>
        <item>通州区</item>
    </string-array>
</resources>

sh.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="sh">
        <item>奉贤区</item>
        <item>黄埔区</item>
        <item>青浦区</item>
    </string-array>
</resources>

参考

  1. Android之单复选框及Spinner实现二级联动
  2. Android:控件Spinner实现下拉列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值