使用Spinner实现下拉列表
2015-10-24 23:26
483 查看
首先在布局文件中创建Spinner 控件,一个最简单的Spinner 控件如下:
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
然后再在JAVA代码中初始化Spinner,为其设置适配器和监听事件。
1. 首先用findViewById() 的方法初始化Spinner
public class MainActivity extends Activity {
<strong>private Spinner spinner;</strong>
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
<strong>spinner = (Spinner)findViewById(R.id.spinner);</strong>
...
}
}
2. 为其设置适配器。
这里有两种方法,第一种是使用ArrayAdapter,第二种是使用SimpleAdapter,两种适配器的使用方法与在ListView 中基本相同
1)使用ArrayAdapter
准备数据源,创建适配器,绑定适配器
public class MainActivity extends Activity {
...
private ArrayAdapter<String> adapter1;
private List<String> dataList1;
private String[] cities = {"北京", "上海", "深圳", "广州"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
dataList1 = new ArrayList<String>();
for(int i = 0; i < cities.length; i++){
dataList1.add(cities[i]);
}
adapter1 = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, dataList1);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter2);
...
}
}
注意到,这里使用适配器多了一条方法adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)这个方法专门用来给Spinner配置下来的样式,这里选择使用了系统的样式。
2)使用SimpleAdapter
准备目标项布局,准备数据源,创建适配器,绑定适配器
spinner_item.xml
MainActivity.java
public class MainActivity extends Activity {
...
private SimpleAdapter adapter2;
private List<Map<String, Object>> dataList2;
private String[] cities = {"北京", "上海", "深圳", "广州"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
dataList2 = new ArrayList<Map<String, Object>>();
for(int i = 0; i < cities.length; i++){
Map<String, Object> map = new HashMap<String, Object>();
map.put("image", R.drawable.ic_launcher);
map.put("text", cities[i]);
dataList2.add(map);
}
adapter2 = new SimpleAdapter(this, dataList2, R.layout.spinner_item, new String[]{"image", "text"}, new int[]{R.id.image, R.id.spinner_text});
spinner.setAdapter(adapter2);
...
}
}SimpleAdapter也可以用setDropDownViewResource方法给适配器设置下拉的样式,不过必须要使用自定义的样式。
3. 设置监听器
设置监听器使用SetOnItemSelectedListener 方法和OnItemSelectedListener 接口
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
...
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
...
}
});
一个完整的示例代码如下
activity_main.xml
<LinearLayout 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"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.spinnerdemo.MainActivity" >
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24sp" />
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
spinner_item.xml
<?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" android:orientation="horizontal" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/spinner_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="5dp" android:text="text" /> </LinearLayout>
MainActivity.java
public class MainActivity extends Activity {
private TextView text;
private Spinner spinner;
// private ArrayAdapter<String> adapter1;
private SimpleAdapter adapter2;
// private List<String> dataList1;
private List<Map<String, Object>> dataList2;
private String[] cities = {"北京", "上海", "深圳", "广州"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView)findViewById(R.id.text);
spinner = (Spinner)findViewById(R.id.spinner);
text.setText("您选择的是北京");
// dataList1 = new ArrayList<String>();
// for(int i = 0; i < cities.length; i++){
// dataList1.add(cities[i]);
// }
// adapter1 = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, dataList1);
dataList2 = new ArrayList<Map<String, Object>>();
for(int i = 0; i < cities.length; i++){
Map<String, Object> map = new HashMap<String, Object>();
map.put("image", R.drawable.ic_launcher);
map.put("text", cities[i]);
dataList2.add(map);
}
adapter2 = new SimpleAdapter(this, dataList2, R.layout.spinner_item, new String[]{"image", "text"}, new int[]{R.id.image, R.id.spinner_text});
//adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter2);
//adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
text.setText("您选择的是" + adapter2.getItem(position));
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
}
}
效果如下:
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
然后再在JAVA代码中初始化Spinner,为其设置适配器和监听事件。
1. 首先用findViewById() 的方法初始化Spinner
public class MainActivity extends Activity {
<strong>private Spinner spinner;</strong>
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
<strong>spinner = (Spinner)findViewById(R.id.spinner);</strong>
...
}
}
2. 为其设置适配器。
这里有两种方法,第一种是使用ArrayAdapter,第二种是使用SimpleAdapter,两种适配器的使用方法与在ListView 中基本相同
1)使用ArrayAdapter
准备数据源,创建适配器,绑定适配器
public class MainActivity extends Activity {
...
private ArrayAdapter<String> adapter1;
private List<String> dataList1;
private String[] cities = {"北京", "上海", "深圳", "广州"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
dataList1 = new ArrayList<String>();
for(int i = 0; i < cities.length; i++){
dataList1.add(cities[i]);
}
adapter1 = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, dataList1);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter2);
...
}
}
注意到,这里使用适配器多了一条方法adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)这个方法专门用来给Spinner配置下来的样式,这里选择使用了系统的样式。
2)使用SimpleAdapter
准备目标项布局,准备数据源,创建适配器,绑定适配器
spinner_item.xml
<?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" android:orientation="horizontal" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/spinner_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="5dp" android:text="text" /> </LinearLayout>
MainActivity.java
public class MainActivity extends Activity {
...
private SimpleAdapter adapter2;
private List<Map<String, Object>> dataList2;
private String[] cities = {"北京", "上海", "深圳", "广州"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
dataList2 = new ArrayList<Map<String, Object>>();
for(int i = 0; i < cities.length; i++){
Map<String, Object> map = new HashMap<String, Object>();
map.put("image", R.drawable.ic_launcher);
map.put("text", cities[i]);
dataList2.add(map);
}
adapter2 = new SimpleAdapter(this, dataList2, R.layout.spinner_item, new String[]{"image", "text"}, new int[]{R.id.image, R.id.spinner_text});
spinner.setAdapter(adapter2);
...
}
}SimpleAdapter也可以用setDropDownViewResource方法给适配器设置下拉的样式,不过必须要使用自定义的样式。
3. 设置监听器
设置监听器使用SetOnItemSelectedListener 方法和OnItemSelectedListener 接口
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
...
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
...
}
});
一个完整的示例代码如下
activity_main.xml
<LinearLayout 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"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.spinnerdemo.MainActivity" >
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24sp" />
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
spinner_item.xml
<?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" android:orientation="horizontal" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/spinner_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="5dp" android:text="text" /> </LinearLayout>
MainActivity.java
public class MainActivity extends Activity {
private TextView text;
private Spinner spinner;
// private ArrayAdapter<String> adapter1;
private SimpleAdapter adapter2;
// private List<String> dataList1;
private List<Map<String, Object>> dataList2;
private String[] cities = {"北京", "上海", "深圳", "广州"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView)findViewById(R.id.text);
spinner = (Spinner)findViewById(R.id.spinner);
text.setText("您选择的是北京");
// dataList1 = new ArrayList<String>();
// for(int i = 0; i < cities.length; i++){
// dataList1.add(cities[i]);
// }
// adapter1 = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, dataList1);
dataList2 = new ArrayList<Map<String, Object>>();
for(int i = 0; i < cities.length; i++){
Map<String, Object> map = new HashMap<String, Object>();
map.put("image", R.drawable.ic_launcher);
map.put("text", cities[i]);
dataList2.add(map);
}
adapter2 = new SimpleAdapter(this, dataList2, R.layout.spinner_item, new String[]{"image", "text"}, new int[]{R.id.image, R.id.spinner_text});
//adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter2);
//adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
text.setText("您选择的是" + adapter2.getItem(position));
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
}
}
效果如下:
相关文章推荐
- Android实现表情 抓取新浪表情
- 详解Android解析Xml的三种方式——DOM、SAX以及XMLpull
- Android下拉列表(Spinner)效果(使用C#和Java分别实现)
- android开发环境遇到adt无法启动的问题分析及解决方法
- Android开发 旋转屏幕导致Activity重建解决方法
- Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)
- Android开发技巧之ViewStub控件惰性装载
- Android中Spinner控件之键值对用法实例分析
- Android自定义Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)
- 分享10个很棒的学习Android开发的网站
- android开发之横向滚动/竖向滚动的ListView(固定列头)
- Android控件之Spinner用法实例分析
- Android开发技巧之我的菜单我做主(自定义菜单)
- Windows下使用Apache Cordova开发ANDROID之HelloWorld
- Spinner的总结
- android.widget.Spinner
- 根据根据图片的url怎么取得图片ImageView对象
- Spinner选中文字颜色和下拉颜色不同的设置
- [转] ADB server didn't ACK
- android开发的相关链接