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>
相关推荐
游戏开发爱好者83 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
王码码20353 小时前
Flutter for OpenHarmony 实战之基础组件:第三十一篇 Chip 系列组件 — 灵活的标签化交互
android·flutter·交互·harmonyos
黑码哥3 小时前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
亓才孓3 小时前
[JDBC]元数据
android
独行soc3 小时前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
金融RPA机器人丨实在智能4 小时前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
科技块儿4 小时前
利用IP查询在智慧城市交通信号系统中的应用探索
android·tcp/ip·智慧城市
独行soc4 小时前
2026年渗透测试面试题总结-18(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
王码码20355 小时前
Flutter for OpenHarmony 实战之基础组件:第二十七篇 BottomSheet — 动态底部弹窗与底部栏菜单
android·flutter·harmonyos
2501_915106325 小时前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview