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>
相关推荐
学习使我健康6 小时前
Android App 启动原理
android·android studio
大嘴皮猴儿7 小时前
从零开始学商品图翻译:小白也能快速掌握的多语言文字处理与上架技巧
大数据·ide·人工智能·macos·新媒体运营·xcode·自动翻译
TechMix7 小时前
【性能工具】atrace、systrace、perfetto抓取的trace文件有何不同?
android·性能优化
张小潇7 小时前
AOSP15 WMS/AMS系统开发 - 窗口层级源码分析
android·前端
努力努力再努力wz9 小时前
【MySQL入门系列】掌握表数据的 CRUD:DML 核心语法与执行逻辑解析
android·开发语言·数据结构·数据库·c++·b树·mysql
zh_xuan12 小时前
Android gradle任务
android·gradle构建
萑澈12 小时前
vscode怎么关闭点击音效
ide·vscode·编辑器
Freak嵌入式12 小时前
MicroPython对接大模型:uopenai + 火山方舟实现文字聊天和图片理解
ide·驱动开发·ai·llm·嵌入式·micropython·upypi
Grackers12 小时前
Android Perfetto 系列 10:Binder 调度与锁竞争
android·binder
李白你好12 小时前
Android 自动化渗透测试指令生成
android·自动化