Android 中使用spinner实现下拉列表的两种方法和getItemAtPosition()方法的使用

简介: Android 中使用spinner实现下拉列表的两种方法和getItemAtPosition()方法的使用

方法一:

通过entries属性,指定列表项

1.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"
    tools:context=".SpinnerActivity"
    android:orientation="horizontal"
    >
    <TextView
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:text="附近区域:"
        android:textSize="25sp"
        android:gravity="right|center"
        />
    <Spinner
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_weight="1"
        android:id="@+id/spinner_location"
        android:entries="@array/spinner"
        />
</LinearLayout>

2.资源文件@array/spinner 需要在values文件下面创建,具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="spinner">
        <item>全部</item>
        <item>上海</item>
        <item>天津</item>
        <item>深圳</item>
    </string-array>
</resources>

效果如下:

方法二:

使用数组适配器ArrayAdapter,展现列表项

public class SpinnerActivity extends AppCompatActivity {
    private Spinner spinner_location;
    private ArrayAdapter arrayAdapter;
    //定义字符串数组,指定数组的元素
    private String[] spinner = new String[]{"全部","上海","深圳","北京"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_spinner);
        spinner_location=findViewById(R.id.spinner_location);
        //参数1.上下文对象 参数2.列表项的样式,Android为我们提供的资源样式为:android.R.layout.simple_spinner_item
        //参数3.定义的字符串数组
        arrayAdapter=new ArrayAdapter(this, android.R.layout.simple_spinner_item,spinner);
        //设置适配器列表框下拉时的列表样式
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        //将适配器与下拉列表框关联起来
        spinner_location.setAdapter(arrayAdapter);
        String s = spinner_location.getSelectedItem().toString();
        Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
    }
}

效果同上。

获取选中项的值,通过调用选择列表项监听器setOnItemSelectedListener

使用其中的getItemAtPosition 获取选中的值

spinner_location.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String result = parent.getItemAtPosition(position).toString();
                Toast.makeText(SpinnerActivity.this, result, Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });

效果如下:

Spinner中常用的属性:

【 常 用 属 性 】
1.      android:entries="@array/menu_type"  //  绑定XML文件找那个的数据源
2.    android:spinnerMode="dropdown"    //  显示模式 
    "dropdown"  直接下拉模式
    "dialog"  对话框效果模式
4.      android:dropDownWidth="250dp"   //  下拉框宽度


目录
相关文章
|
3月前
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
76 2
基于Android P,自定义Android开机动画的方法
|
3月前
|
Android开发
基于android-11.0.0_r39,系统应用的手动签名方法和过程
本文介绍了基于Android 11.0.0_r39版本进行系统应用手动签名的方法和解决签名过程中遇到的错误,包括处理`no conscrypt_openjdk_jni-linux-x86_64`和`RegisterNatives failed`的问题。
180 2
|
21天前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
45 15
Android 系统缓存扫描与清理方法分析
|
5月前
|
前端开发 Android开发 Windows
27. 【Android教程】下拉选择框 Spinner
27. 【Android教程】下拉选择框 Spinner
213 2
|
2月前
|
ARouter 测试技术 API
Android经典面试题之组件化原理、优缺点、实现方法?
本文介绍了组件化在Android开发中的应用,详细阐述了其原理、优缺点及实现方式,包括模块化、接口编程、依赖注入、路由机制等内容,并提供了具体代码示例。
45 2
|
3月前
|
Android开发
Android在rootdir根目录创建自定义目录和挂载点的方法
本文介绍了在Android高通平台的根目录下创建自定义目录和挂载点的方法,通过修改Android.mk文件并使用`LOCAL_POST_INSTALL_CMD`变量在编译过程中添加目录,最终在ramdisk.img的系统根路径下成功创建了`/factory/bin`目录。
198 1
|
3月前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
423 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
3月前
|
Android开发
Android项目架构设计问题之onFirstItemVisibleChanged方法的调用如何解决
Android项目架构设计问题之onFirstItemVisibleChanged方法的调用如何解决
38 0
|
3月前
|
Java 测试技术 Android开发
Android项目架构设计问题之使用反射调用类的私有方法如何解决
Android项目架构设计问题之使用反射调用类的私有方法如何解决
29 0
|
4月前
|
Android开发
Android面试题之View的invalidate方法和postInvalidate方法有什么区别
本文探讨了Android自定义View中`invalidate()`和`postInvalidate()`的区别。`invalidate()`在UI线程中刷新View,而`postInvalidate()`用于非UI线程,通过消息机制切换到UI线程执行`invalidate()`。源码分析显示,`postInvalidate()`最终调用`ViewRootImpl`的`dispatchInvalidateDelayed`,通过Handler发送消息到UI线程执行刷新。
56 1