属性:
android:spinnerMode = "" 下拉菜单的展示方式
属性值: dropdown 下拉方式(默认的)
dialog 对话框方式
dialog 对话框方式
如果下拉方式是dialog: 那么可以指定标题 android:prompt="@string/title" (只能引用,不能直接写文字)
android:entries="@array/books" 填充下拉菜单的内容。
填充方式
使用ArrayAdapter 来填充数据
适用场景 : Item 只有一个文本, 不能显示图片
数据源 : String[] / List<String>
步骤 :
1, 控件, 得到控件并且初始化
2, 得到数据源
3, 得到适配器
实例:
public class MainActivity extends Activity {
private Spinner s1, s2;
private String[] data = { "字母", "数字", "字符" };
private Map<String, Object> map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
s1 = (Spinner) findViewById(R.id.s1);
s2 = (Spinner) findViewById(R.id.s2);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, data);
s1.setAdapter(adapter);
map = new HashMap<String, Object>();
map.put("字母", new String[] { "A", "B", "C" });
map.put("数字", new String[] { "1", "2", "3" });
map.put("字符", new String[] { "!", "@", "#" });
s1.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Object ob = map.get(data[position]);
String[] s11 = (String[]) ob;
ArrayAdapter<String> aaaa = new ArrayAdapter<String>(MainActivity.this,
R.layout.spinnerstyle, R.id.t1, s11);
s2.setAdapter(aaaa);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/t1"
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="#0f0"
/>
</LinearLayout>
使用SimpleAdapter 填充数据
适用场景 图文混排,图片来自本地
数据源 List<Map<String,Object>>
步骤:
1, 控件, 得到控件并且初始化
1, 控件, 得到控件并且初始化
2, 得到数据源
3, 得到适配器
4, 为控件设置适配器
实例:
public class SimpleArraryActivity extends Activity {
private Spinner spinner;
private List<Map<String, Object>> list;
private int[] icon = { R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher, R.drawable.ic_launcher };
private String[] name = { "蒋", "刘", "杨", "王", "李", "黄", "夏", "陈" };
private int[] age = { 12, 23, 14, 16, 34, 23, 56, 20 };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spanner);
spinner = (Spinner) findViewById(R.id.spinner);
list = new ArrayList<Map<String, Object>>();
for (int i = 0; i < icon.length; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("icon", icon[i]);
map.put("name", name[i]);
map.put("age", age[i]);
list.add(map);
}
// 定义适配器
SimpleAdapter simAdapter = new SimpleAdapter(SimpleArraryActivity.this,
list, R.layout.activity_simple_arrary, new String[] { "icon", "name",
"age" }, new int[] { R.id.iv, R.id.t11, R.id.t12 });
spinner.setAdapter(simAdapter);
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SimpleArraryActivity" >
<ImageView
android:id="@+id/iv"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/t11"
android:layout_marginLeft="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="姓名"
android:layout_toRightOf="@id/iv"
android:textSize="18sp"
android:layout_alignTop="@id/iv"/>
<TextView
android:id="@+id/t12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="年龄"
android:layout_marginLeft="20dp"
android:layout_toRightOf="@id/iv"
android:layout_below="@id/t11"
android:textSize="18sp"
android:layout_alignBottom="@id/iv"/>
</RelativeLayout>
监听器:
onItemSelectedListener
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
/**
* AdapterView<?> parent 监听器的下拉列表对象
* View view 当前被选中的View
* int position 当前被选中条目的位置(从0开始)
* long id 当前被选中View的Id
*/
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO 选中内容触发
//从数据源中获取当前点击的内容
String info = data.get(position);
//从parent中获取当前点击的内容
String info2 = parent.getItemAtPosition(position).toString();
//从spinner中获取当前点击的内容
String info3 = spinner.getItemAtPosition(position).toString();
//从adapter中获取当前点击的内容
String info4 = adapter.getItem(position);
Toast.makeText(ArrayAdapterActivity.this, "info="+info+",info2="+info2+",info3="+info3+",info4="+info4, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO 如果数据源清空后, 调用适配器的刷新方法时, 执行此方法
}
});