学习下拉框,首先必须要了解适配器
适配器(Adapter)
作用:适配器负责从数据集合中取出对应的数据显示到条目布局上
所以在需要用到适配器时,需要创建一个条目布局
例如:在layout布局下创建一个TextView的条目
Adapter的基本子类有ArrayAdapter(数组适配器)和SimpleAdapter(简单适配器)
数组适配器就是中是一些文字,而简单适配器中可以包含图片和文字
数组适配器
数组适配器的使用步骤:
1.xml文件布局只有一个TextView
2.调用ArrayAdapter的构造方法,填入展现的数组,以及xml文件
3.调用下拉框控件的setAdapter方法,传入第二步得到的适配器实例
直接上代码
Java代码
- package com.example.chapter6;
- import androidx.appcompat.app.AppCompatActivity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Adapter;
- import android.widget.AdapterView;
- import android.widget.ArrayAdapter;
- import android.widget.Spinner;
- import android.widget.Toast;
- public class adapterViewActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
- private Spinner sp_dropdown;
- private final static String[] array = new String[]{"火星","月球","地球"};
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_adapter_view);
- sp_dropdown = findViewById(R.id.sp_dropdown);//找到下拉框的id
- ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<>(this,R.layout.item_selector,array);//创建适配器
- //适配器的参数,首先是上下文,其次,需要在布局文件下创建一个名字为item_selector的TextView的条目布局,最后一个参数是数组,就是将这个数组中的数据传给适配器,再由适配器放到下拉框上
- sp_dropdown.setAdapter(stringArrayAdapter);//下拉框配置适配器
- sp_dropdown.setSelection(0);//默认选中第一个元素
- sp_dropdown.setOnItemSelectedListener(this);//事件监听
- }
- @Override
- public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
- Toast.makeText(adapterViewActivity.this,"您的选择是"+array[position],Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onNothingSelected(AdapterView<?> parent) {
- }
- }
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="50dp"
- android:gravity="center"
- android:textColor="#000000"
- android:textSize="25sp"/>
xml属性文件
- <?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"
- android:orientation="horizontal">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="50dp"
- android:text="选择适合的星球"
- android:textSize="25sp"
- android:textColor="#000000"/>
- <Spinner
- android:id="@+id/sp_dropdown"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="50dp"
- android:spinnerMode="dropdown"/>
- </LinearLayout>
简单适配器SimpleAdapter
简单适配器是同时拥有文字和图片,所以条目布局中设置一个ImageView 和一个TextView
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <!--普通布局的条目-->
- <!--一个image,一个text-->
- <ImageView
- android:id="@+id/iv_scope"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="50dp"
- />
- <TextView
- android:layout_width="0dp"
- android:layout_weight="3"
- android:layout_height="match_parent"
- android:textSize="25sp"
- android:textColor="#000000"
- android:gravity="center" />
- </LinearLayout>
java代码
- package com.example.chapter6;
- import androidx.appcompat.app.AppCompatActivity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.LinearLayout;
- import android.widget.SimpleAdapter;
- import android.widget.Spinner;
- import android.widget.Toast;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- public class SimpleAdapterActivity extends AppCompatActivity {
- private static final int[] iconArray = {
- R.drawable.oppo,R.drawable.iphone,R.drawable.ronyao,
- R.drawable.vivo,R.drawable.xiaomi,R.drawable.mate
- };
- private static final String[] starArray = {"oppo","苹果","荣耀","vivo","小米","mate"};
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_simple_adapter);
- LinearLayout ite_simple = findViewById(R.layout.item_simple);
- List<Map<String,Object>> list = new ArrayList<>();
- //循环存储每个元素,创建一个map,每个list中都有两个,key为icon,value 为name 的map
- //依次对应
- for (int i = 0; i < iconArray.length; i++) {
- Map<String,Object> map = new HashMap<>();
- map.put("icon",iconArray[i]);
- map.put("name",starArray[i]);
- list.add(map);
- }
- //声明一个简单适配器的,指定固定图形与文本两组数据
- SimpleAdapter simpleAdapter = new SimpleAdapter(this,list,R.layout.item_simple,
- new String[]{"icon","name"},new int[]{R.id.iv_icon,R.id.tv_name});
- //第一个参数:上下文,第二个参数:条目布局,第三个是每个list中的map的key,第四个就是对应list中map的key对应的数据的组件
- Spinner sp_simple = findViewById(R.id.sp_simple);
- sp_simple.setAdapter(simpleAdapter);//添加适配器
- sp_simple.setSelection(0);//设置初始值,就是一开始默认选择的值
- sp_simple.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
- Toast.makeText(SimpleAdapterActivity.this, "选择好了", Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onNothingSelected(AdapterView<?> parent) {
- }
- });
- }
- }
配置xml文件
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <!--普通布局的条目-->
- <!--一个image,一个text-->
- <ImageView
- android:id="@+id/iv_icon"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="50dp"
- />
- <TextView
- android:id="@+id/tv_name"
- android:layout_width="0dp"
- android:layout_weight="3"
- android:layout_height="match_parent"
- android:textSize="25sp"
- android:textColor="#000000"
- android:gravity="center" />
- </LinearLayout>