Spinner下拉选择框学习记录,,,代码如下,注释非常详细了
SpinnerActivity
package com.btzh.mynotification;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class SpinnerActivity extends AppCompatActivity {
Spinner commonSp;
Spinner customSp;
Spinner arraySp;
private List<HashMap<String,String>>dataLists = new ArrayList<>();
String[]names ={"张三","李四","王二","赵五","孙六"};
String[]cities ={"北京","武汉","合肥","上海","台北"};
SimpleAdapter simpleAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner);
initViews();
//填充adapter数据时,一定要对adapter进行刷新操作
initSpinnerDatas();
}
//初始化
void initViews(){
/***## 1. spinner by arraies*******/
commonSp = findViewById(R.id.common);
//设置选中监听
commonSp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// Toast.makeText(SpinnerActivity.this,"选中的position:"+position+"\n"
// +"选中内容"+commonSp.getSelectedItem().toString(),Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
commonSp.setEnabled(true); //设置是否能够点击
//commonSp.setSelection(1); //默认选中第几个选项(注意不要超过数据源的长度)
commonSp.setTag("commonSp"); //设置标签别名,在多个spinner的选中监听事件中会很方便使用
//设置选中默认,并有动画显示(没看出来啊,提示只有当被请求的位置已经在屏幕上时才有动画,我怎么知道啥意思,我也很绝望啊)
commonSp.setSelection(2,true);
//commonSp.setAdapter(yourAdapter); //设置adapter
/***## 2. spinner by ArrayAdapter*******/
arraySp = findViewById(R.id.arraySp);
ArrayAdapter<String> commonAdapter =
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,new String[]{"北极光","南极企鹅","冬季"});
//commonAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);//设置下拉视图
arraySp.setAdapter(commonAdapter);
/*****## 3. spinner by simpleAdapter*******/
customSp = findViewById(R.id.customSp);
simpleAdapter = new SimpleAdapter(this,dataLists,
R.layout.spinner_layout,new String[]{"name","city"},new int[]{R.id.spinner_name,R.id.spinner_city});
customSp.setAdapter(simpleAdapter);
customSp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//获取选中的数据 --方法1
HashMap<String,String> selectMap2 = (HashMap<String,String>) parent.getSelectedItem();
if (!selectMap2.isEmpty()){
System.out.println("-------name2----:"+selectMap2.get("name")+
"------city2----:"+selectMap2.get("city")+"---position2---"+position);
}
//获取选中的数据--方法3
String name = dataLists.get(position).get("name");
String city = dataLists.get(position).get("city");
Toast.makeText(SpinnerActivity.this,"name--"+name+"---city---"+city+"---position---"+position,Toast.LENGTH_LONG).show();
获取选中的数据--方法3
//其中根据源码可得 customSp.getSelectedItem() 等价于 parent.getSelectedItem()
HashMap<String,String> selectMap1 = (HashMap<String,String>) customSp.getSelectedItem();
String name1 = selectMap1.get("name");
String city1 = selectMap1.get("city");
System.out.println("-------name1----:"+name1+
"------city1----:"+city1+"---position1---"+position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
HashMap<String,String> selectMap = (HashMap<String,String>) parent.getSelectedItem();
if (!selectMap.isEmpty()){
System.out.println("-------name:"+selectMap.get("name")+"\n"+
"------city:"+selectMap.get("city"));
}
}
});
}
void initSpinnerDatas(){
for (int i=0; i<20;i++){
HashMap<String,String>map = new HashMap<>();
map.put("name",names[i%5]);
map.put("city",cities[i%5]);
dataLists.add(map);
}
simpleAdapter.notifyDataSetChanged();
}
}
SpinnerActivity 的布局文件
<?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="vertical"
tools:context="com.btzh.mynotification.SpinnerActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:orientation="horizontal"
android:padding="8dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:gravity="center"
android:padding="8dp"
android:text="Common" />
<Spinner
android:id="@+id/common"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:entries="@array/languages"
android:gravity="center"
android:padding="8dp">
</Spinner>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:orientation="horizontal"
android:padding="8dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:gravity="center"
android:padding="8dp"
android:text="ArraySpinner" />
<Spinner
android:id="@+id/arraySp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:gravity="center"
android:padding="8dp">
</Spinner>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:orientation="horizontal"
android:padding="8dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:gravity="center"
android:padding="8dp"
android:text="My Custom" />
<Spinner
android:id="@+id/customSp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:gravity="center"
android:padding="8dp">
</Spinner>
</LinearLayout>
</LinearLayout>
simpleAdapter 的布局文件
<?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="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_margin="8dp"
android:src="@mipmap/ic_launcher_round"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_margin="8dp"
android:textSize="14sp"
android:text="mike"
android:layout_gravity="center_vertical"
android:id="@+id/spinner_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_margin="8dp"
android:textSize="14sp"
android:text="beijing"
android:layout_gravity="center_vertical"
android:id="@+id/spinner_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
res->Values->strings目录下
<string-array name="languages">
<item>c语言</item>
<item>java </item>
<item>php</item>
<item>xml</item>
<item>html</item>
</string-array>
赋值代码到对应目录下,注册下activity就能正常运行了,
效果图如下: