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>
相关推荐
没有了遇见43 分钟前
Kotlin高级用法之<扩展函数/属性>
android·kotlin
安卓开发者1 小时前
Android中使用RxJava实现网络请求与缓存策略
android·网络·rxjava
2501_915921432 小时前
iOS 应用上架多环境实战,Windows、Linux 与 Mac 的不同路径
android·ios·小程序·https·uni-app·iphone·webview
wstcl3 小时前
安卓app、微信小程序等访问多个api时等待提示调用与关闭问题
android·微信小程序·webapi
louisgeek5 小时前
Android Studio 打印中文乱码
android
眼镜会飞5 小时前
Flutter 3.x新版android端的build.gradle.kts文件配置arm64-v8a和armeabi-v7a等
android·前端·flutter
vocal5 小时前
【我的安卓第一课】Activity 的伙伴 Fragment
android
Nayuta6 小时前
字节跳动「移动 OS 部门」招聘安卓工程师,AI+OS 方向
android
00后程序员张6 小时前
iOS 应用上架常见问题与解决方案,多工具组合的实战经验
android·ios·小程序·https·uni-app·iphone·webview
恋猫de小郭7 小时前
Flutter 小技巧之有趣的 UI 骨架屏框架 skeletonizer
android·前端·flutter