Android Studio实现Spinner下拉列表

效果图

点击下拉列表

点击某一个下拉列表

MainActivity

java 复制代码
package com.example.spinneradapterpro;

import androidx.appcompat.app.AppCompatActivity;

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

import com.example.spinneradapterpro.adapter.SpinnerUserAdapter;
import com.example.spinneradapterpro.bean.UserSpinnerBean;

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

public class MainActivity extends AppCompatActivity {
    private Spinner mSpinner;
    private List<UserSpinnerBean> mUserSpinnerBeanList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mSpinner = findViewById(R.id.sp);
        for (int i = 0; i < 50; i++) {
            mUserSpinnerBeanList.add(new UserSpinnerBean(R.drawable.avatar, "下拉列表" + i));
        }
        //可以将自己想要加入spinner的文件加到list中
        mSpinner.setAdapter(new SpinnerUserAdapter(mUserSpinnerBeanList, MainActivity.this));
        mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(MainActivity.this, mUserSpinnerBeanList.get(i).getUserName(), Toast.LENGTH_SHORT).show();
            }

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

            }
        });
    }
}

UserSpinnerBean

java 复制代码
package com.example.spinneradapterpro.bean;

public class UserSpinnerBean {
    private int mImage;
    private String mUserName;

    public UserSpinnerBean(int image, String userName) {
        mImage = image;
        mUserName = userName;
    }

    public int getImage() {
        return mImage;
    }

    public void setImage(int image) {
        mImage = image;
    }

    public String getUserName() {
        return mUserName;
    }

    public void setUserName(String userName) {
        mUserName = userName;
    }
}

SpinnerUserAdapter

java 复制代码
package com.example.spinneradapterpro.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.spinneradapterpro.R;
import com.example.spinneradapterpro.bean.UserSpinnerBean;

import java.util.List;

public class SpinnerUserAdapter extends BaseAdapter {
    private List<UserSpinnerBean> mUserSpinnerBeans;
    private Context mContext;

    public SpinnerUserAdapter(List<UserSpinnerBean> userSpinnerBeans, Context context) {
        mUserSpinnerBeans = userSpinnerBeans;
        mContext = context;
    }

    @Override
    public int getCount() {
        return mUserSpinnerBeans == null ? 0 : mUserSpinnerBeans.size();
    }

    @Override
    public Object getItem(int i) {
        return getItem(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder;
        if (view == null) {
            view = View.inflate(mContext, R.layout.spinner_adapter_item, null);
            viewHolder = new ViewHolder(view);
            view.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) view.getTag();
        }
        //UserSpinnerBean userSpinnerBean = (UserSpinnerBean) getItem(i);
        UserSpinnerBean userSpinnerBean = mUserSpinnerBeans.get(i);
        viewHolder.mImage.setImageResource(R.drawable.avatar);
        viewHolder.mUserName.setText(userSpinnerBean.getUserName());
        return view;
    }

    static
    class ViewHolder {
        View mView;
        ImageView mImage;
        TextView mUserName;

        ViewHolder(View view) {
            this.mView = view;
            this.mImage = (ImageView) view.findViewById(R.id.img);
            this.mUserName = (TextView) view.findViewById(R.id.userName);

        }
    }
}

activity_main 下拉列表

java 复制代码
<?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/sp"
        android:layout_width="200dp"
        android:layout_height="wrap_content" />

</LinearLayout>

spinner_adapter_item 列表显示内容格式

java 复制代码
<?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/img"
        android:layout_width="50dp"
        android:layout_height="50dp" />

    <TextView
        android:id="@+id/userName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>
相关推荐
__Witheart__6 分钟前
HW-T3568 安卓固件编译指南
android
邪修king9 分钟前
C++map_set封装 : 红黑树底层迭代器以及仿函数的运用
android·c语言·数据结构·c++·b树
OliverH-yishuihan27 分钟前
【保姆级教程】Win11 下从零部署 Claude Code:本地环境配置 + VSCode 可视化界面全流程指南
ide·vscode·编辑器
AI2中文网40 分钟前
App Inventor 2 鸿蒙先行版开发进展:从 Android 到 HarmonyOS 的积木编程迁移实录
android·低代码·华为·harmonyos·app inventor
__Witheart__1 小时前
Android 驱动编译为模块或者built-in内核
android·linux·数据库
恋猫de小郭1 小时前
Flutter 最好的 AI 自动化测试工具:Patrol
android·前端·flutter
流星白龙1 小时前
【MySQL高阶】16.行结构
android·mysql·adb
IOT.FIVE.NO.12 小时前
[多agent工作]Codex+claudecode+vscode+copilot 自定义deepseek api加全套安装agent工作流程
ide·vscode·copilot
HQL_seven2 小时前
Android 四大组件解析
android
Digitally2 小时前
适用于安卓、iOS 和电脑的最新文件共享应用评测指南
android·ios·电脑