高级控件4:Spinner

Spinner下拉列表组件

主要集合ArrayAdapter、SimpleAdapter以及自定义的Adapter(继承自BaseAdapter)配合使用实现下拉选择或者对话框中选择某一条目。下拉使用的更多,所以,接下来的案例也会重在演示下拉效果。

本次基本就是上代码,前面高级控件中已经详细讲解了适配器参数的含义,也用了多次。

用法1:Spinner+ArrayAdapter(下拉按钮)

spinner_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="30sp"/>

注意:不能有布局

布局文件:

<?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=".MainActivity">

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:spinnerMode="dropdown" />
</LinearLayout>

逻辑文件

package com.yibinu.spinnerdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.database.DataSetObserver;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

    Spinner spinner;
    //造数据
    List<String> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner = findViewById(R.id.spinner);

        list = new ArrayList<>();
        list.add("====请选择====");
        for (int i = 0; i < 10; i++) {
            list.add("测试文本"+(i+1));
        }

        ArrayAdapter adapter = new ArrayAdapter(this,R.layout.spinner_item,list);
        adapter.setDropDownViewResource(R.layout.spinner_item);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(this);
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        TextView textView = (TextView)view;
        Toast.makeText(this, "您选中的是:"+textView.getText(), Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        spinner.setSelection(0);
    }
}

 效果

当选中某一项时,弹出Toast信息,核心方法:setOnItemSelectedListener

 用法2:Spinner+SimpleAdapter(下拉按钮)

子项布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="64dp"
        android:layout_height="64dp"
        android:src="@drawable/ic_launcher_background"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="64dp"
        android:orientation="vertical">
        <TextView
            android:id="@+id/up"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:text="上"/>
        <TextView
            android:id="@+id/down"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:text="下"/>
    </LinearLayout>
</LinearLayout>

布局文件:

<?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=".SecondActivity">

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:spinnerMode="dropdown" />
</LinearLayout>

 逻辑文件:

package com.yibinu.spinnerdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SecondActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

    Spinner spinner;
    //造数据
    List<Map<String,String>> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner = findViewById(R.id.spinner);

        list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Map<String, String> map = new HashMap<>();
            map.put("img",R.drawable.ic_launcher_background+"");
            map.put("up","上部分信息"+(i+1));
            map.put("down","下部分信息"+(i+1));
            list.add(map);
        }

        String[] from = new String[]{"img","up","down"};
        int[] to = new int[]{R.id.imageView,R.id.up,R.id.down};
        SimpleAdapter adapter = new SimpleAdapter(this,list,R.layout.spinner_item2,from,to);
        adapter.setDropDownViewResource(R.layout.spinner_item2);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(this);
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        TextView up = view.findViewById(R.id.up);
        Toast.makeText(this, "您选中的是:"+up.getText(), Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        spinner.setSelection(0);
    }
}

效果:

 

用法3:Spinner+自定义适配器(下拉按钮)

创建学生类

package com.yibinu.customdemo;

import android.widget.ImageView;

import androidx.annotation.NonNull;

public class Student {
    private int resid;
    private String name;
    private String grade;

    public Student(int resid, String name, String grade) {
        this.resid = resid;
        this.name = name;
        this.grade = grade;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    public String getName() {
        return name;
    }

    public String getGrade() {
        return grade;
    }

    public void setResid(int resid) {
        this.resid = resid;
    }

    public int getResid() {
        return resid;
    }

    @Override
    public String toString() {
        return "Student{" +
                "resid=" + resid +
                ", name='" + name + '\'' +
                ", grade='" + grade + '\'' +
                '}';
    }
}

 子项布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="64dp"
        android:layout_height="64dp"
        android:src="@drawable/ic_launcher_background"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="64dp"
        android:orientation="vertical">
        <TextView
            android:id="@+id/up"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:text="上"/>
        <TextView
            android:id="@+id/down"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:text="下"/>
    </LinearLayout>
</LinearLayout>

布局文件:

<?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=".MainActivity">

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:spinnerMode="dropdown"/>

</LinearLayout>

自定义适配器

package com.yibinu.customdemo;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;

public class MyAdapter extends BaseAdapter {
    private Context context;
    private List<Student> list;
    public MyAdapter(Context context,List<Student> list){
        this.context = context;
        this.list= list;
    }
    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }
    //获取一个View
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Log.i("getView", "getView: ");
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.spinner_item_3, null);
        ImageView imageView = view.findViewById(R.id.imageView);
        TextView up = view.findViewById(R.id.up);
        TextView down = view.findViewById(R.id.down);
        imageView.setBackgroundResource(list.get(position).getResid());
        up.setText("上部分信息:"+(position+1));
        down.setText("上部分信息:"+(position+1));
        return view;
    }

}

 逻辑文件:

package com.yibinu.customdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

    Spinner spinner;
    int[] resIds = new int[]{R.drawable.a,R.drawable.b,
            R.drawable.e,R.drawable.d, R.drawable.e};
    List<Student> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner = findViewById(R.id.spinner);

        list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Student student = new Student(R.drawable.a,"张三"+(i+1),(i+1)+"班");
            list.add(student);
        }

        MyAdapter adapter = new MyAdapter(this,list);
        spinner.setAdapter(adapter);

        spinner.setOnItemSelectedListener(this);
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        TextView up = view.findViewById(R.id.up);
        Toast.makeText(this, ""+up.getText(), Toast.LENGTH_SHORT).show();
    }

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

    }
}

效果

用法4:Spinner+对话框(对话框)

该种使用方法与前三种最大的区别在于,在逻辑文件中,使用Spinner组件时,需要设置模式为对话框模式,其他操作均相同,本处只写一种方式。

布局文件:

<?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=".MainActivity">

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:spinnerMode="dialog"/>
</LinearLayout>

 子项布局:

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

逻辑文件

package com.yibinu.dialogspinnerdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

    Spinner spinner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner = findViewById(R.id.spinner);
        ArrayAdapter adapter = new ArrayAdapter(this,R.layout.spinner_item,new String[]{"选项1","选项2","选项3","选项4","选项5"});
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(this);
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        TextView textView = (TextView)view;
        Toast.makeText(this, "你选择的是:"+textView.getText(), Toast.LENGTH_SHORT).show();
    }

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

    }
}

 效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/567718.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解高级加密标准(Advanced Encryption Standard)

title: 深入理解高级加密标准&#xff08;Advanced Encryption Standard&#xff09; date: 2024/4/23 20:04:36 updated: 2024/4/23 20:04:36 tags: AES概述加密原理优势特点算法详解安全性应用实践案例分析 第一章&#xff1a;AES概述 AES的历史和背景 历史&#xff1a; 高…

【八股文】Spring 谈谈你对AOP的理解

AOP AOP(Aspect-Oriented Programming&#xff0c;面向切面编程)&#xff1a;是一种新的方法论&#xff0c;是对传统 OOP(Object-Oriented Programming&#xff0c;面向对象编程)的补充。 面向对象是纵向继承&#xff0c;面向切面是横向抽取。 OOP思想是一种垂直纵向的继承体…

上网行为管理软件怎么选 三款好用的上网行为管理软件

上网行为管理软件怎么选 三款好用的上网行为管理软件 一款优秀的上网行为管理软件可以满足企业的多种需求&#xff0c;帮助企业有效监督员工的行为&#xff0c;提升工作效率和企业效益&#xff0c;但是这些软件差异较大&#xff0c;选择的时候需要考虑这些因素。 1、明确需求 …

基于一款最多能够支持10000路的 modbus RS485 led灯光控制板做灯控程序

背景 介绍一款之前用过的一款设备&#xff0c;基于RS485通讯协议&#xff0c;控制LED灯或RGB灯带。 设备介绍 之前用它来做智能中药柜的灯控板&#xff0c;结合物联网网关&#xff0c;modbus采集&#xff0c;mqtt转发&#xff0c;以及mqtt的rpc指令下发 设备图片 功能说明 …

Java基本语法(基础部分)

Java基本语法 文章目录 Java基本语法前言一、准备工作1.1 计算机软件与硬件1.2 计算机编程语言1.3 Java语言概述&程序分析1.4 Java环境搭建&Java API1.5 Java核心机制JVM 二、变量2.1 关键字&标识符2.2 变量2.3 数据类型(基本数据类型)2.3.1 基本数据类型2.3.2 基本…

互联网营销两大宗师:周鸿祎和雷军做个人IP有什么不同?

前几天周鸿祎说要把自己的迈巴赫卖了,准备换国产新能源,还喊话让各个车企给他送车去体验。不少车企都送去了自己的最新车型,只有雷军直接回答,“等SUV出”。我们是在吃瓜,作者却是从中看到了新老营销宗师的手法不同。 最近,在纪念互联网30周年的座谈会上,发生了一件趣事…

JAVA网络编程、项目验证码实现

什么是网络编程? 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输。 应用场景&#xff1a;即时通信、网游对战、金融证券、国际贸易、邮件、等等 不管是什么场景&#xff0c;都是计算机跟计算机之间通过网络进行数据传输 Java中可以使用ja…

wordpress建网站主题案例推荐

wordpress企业网站主题案例 https://www.mymoban.com/wordpress/ wordpress公司官网主题案例 https://www.wowsoho.com/jianzhan wordpress外贸主题案例 https://www.wpniu.com/moban

一维递归:递去

示例&#xff1a; /*** brief how about recursive-forward-1? show you here.* author wenxuanpei* email 15873152445163.com(query for any question here)*/ #define _CRT_SECURE_NO_WARNINGS//support c-library in Microsoft-Visual-Studio #include <stdio.h>…

深度学习-数据操作

目录 张量通过shape属性访问张量的形状通过shape属性访问张量中元素的总数reshape改变张量的形状&#xff08;不改变元素数量和元素值&#xff09;使用全0、全1、其他常量或者从特定分布中随机采样的数字通过提供包含数值的Python列表为所需张量中的每个元素赋予确定值。张量的…

记录交叉编译环境配置--海思开发板的 嵌入式nginx和 php的移植

嵌入式 lnmp搭建的记录 一些交叉编译的配置环境思路分享&#xff1a;P&#xff1a;php编译PHP可能遇到的问题configure阶段&#xff1a;Makefile-make阶段&#xff1a;Makefile-make install阶段&#xff1a; N&#xff1a;Nginx 文章比较水&#xff0c;并没有没解决什么实际问…

导出JVM的线程信息

1. 查询出Java应用的进程的PID ps -ef|grep java 此时的PID是 33 2. 使用JDK自带的工具jstack导出日志 jstack -l 33 > 2022jstack.log 3.然后直接下载

自动备份的小软件

自动备份的小软件 前几天有个小姐姐和我说&#xff0c;他的硬盘坏了&#xff0c;但是他有没有备份&#xff0c;所以我决定做一个自动备份的软件。 软件整体是使用pythonpyqt5做到。 github链接 软件截图 使用效果 使用方法 教程 流程图 优势 可以很大程度上解决数据丢失…

平均月薪超4.6万!AI领域重磅课程汇总,哈佛,斯坦福,微软,谷歌等出品!

2023年底&#xff0c;由脉脉高聘人才智库发布的《2023泛人工智能人才洞察》报告显示&#xff0c;2023年前八个月内新发布的AI岗位平均月薪超过了4.6万元&#xff0c;而且人才供不应求&#xff0c;甚至出现了5个岗位争夺2个人才的情况。 本文章整理了10项来自全球各高校与知名企…

手把手教数据结构与算法:有序线性表设计

问题描述 设计一个有序线性表类&#xff0c;要求完成初始化&#xff0c;插入和遍历功能&#xff0c;使得表内元素实现有序排列&#xff08;从小到大&#xff09;。同时实现合并功能&#xff0c;使得两个线性表能够合并为一个线性表&#xff08;可能存在重复元素&#xff09;。…

Bentley二次开发教程02-开发环境搭建

1 Bentley 平台介绍 图 1 Bentley 平台介绍 Bentley 软件大致可分为四大平台&#xff0c;分别为用于设计的 Microstation 平台&#xff0c;用于协同的 ProjectWise 平台&#xff0c;用于对资产进行全生命周期管理的 AssetWise 平台和数据互联互通的 数字孪生平台 iTwin。 1.1 …

Flume的安装及使用

Flume的安装及使用 文章目录 Flume的安装及使用Flume的安装1、上传至虚拟机&#xff0c;并解压2、重命名目录&#xff0c;并配置环境变量3、查看flume版本4、测试flume5、flume的使用 Flume的安装 1、上传至虚拟机&#xff0c;并解压 tar -zxvf apache-flume-1.9.0-bin.tar.g…

python来实现nmap扫描

今天分享一个用python实现nmap扫描的方法&#xff0c;以下是实现步骤 代码如下&#xff1a; import subprocessmissing_ips {166.139.144.163, 31.47.8.35, 58.242.86.191, 212.178.135.62, 103.1.35.114} port "7" for missing_ip in missing_ips:# 构造nmap命令…

【Elasticsearch】Elasticsearch 从入门到精通(二):基础使用

《Elasticsearch 从入门到精通》共包含以下 2 2 2 篇文章&#xff1a; Elasticsearch 从入门到精通&#xff08;一&#xff09;&#xff1a;基本介绍Elasticsearch 从入门到精通&#xff08;二&#xff09;&#xff1a;基础使用 &#x1f60a; 如果您觉得这篇文章有用 ✔️ 的…

基于MLP算法实现交通流量预测(Pytorch版)

在海量的城市数据中&#xff0c;交通流量数据无疑是揭示城市运行脉络、洞察出行规律的关键要素之一。实时且精准的交通流量预测不仅能为交通规划者提供科学决策依据&#xff0c;助力提升道路使用效率、缓解交通拥堵&#xff0c;还能为公众出行提供参考&#xff0c;实现个性化导…