在xml文件中添加上列表中的数组信息,下面是JAVA代码实现方式:
// 找到Xml中定义的下拉列表
Spinner spinner = (Spinner) findViewById(R.id.spinner);
// 准备一个数组适配器
ArrayAdapter adapter = ArrayAdapter.createFromResource(
MainActivity.this, R.array.colors,
android.R.layout.simple_spinner_dropdown_item);
// 设置下拉样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 为下拉列表设置适配器
spinner.setAdapter(adapter);
// 定义子元素选择监听器
OnItemSelectedListener oisl = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,
"选择的色彩: " + arg0.getItemAtPosition(arg2).toString(),
Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
};
// 为下拉列表绑定事件监听器
spinner.setOnItemSelectedListener(oisl);
很显然,需要给他提供一个adapter,来填充每一列中的布局及内容。
在上面的例子中,为展开和展开后的UI格式采用了Android自定义的格式,都可以自行定义。
ArrayAdapter adapter = new ArrayAdapter(this,R.layout.item,R.id.textView,list);
在上面的例子中,我们使用某个ArrayAdapter的构造函数,其中第一个参数是context,第二个参数指定下来菜单的每个条目的样式,第三个参数指定了在每个条目样式中用于显示数据的TextView的Id,第四个参数为列表的数据来源(可以是任何格式,toString()就是相应的赋值)。
有些情况下,我们可能需要自定义spinner的布局,或者想要动态的添加和删除spinner中的数据;下方有事例代码,其中分为两个.xml文件:activity.xml,textview.xml;
.java:
public class MainActivity extends Activity {
Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = (Spinner) findViewById(R.id.spinner);
List<String> list = new ArrayList<String>();
//假如这是默认的数据
list.add("test");
//自定义spinner的样式
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
MainActivity.this,
android.R.layout.simple_spinner_dropdown_item, list){
@Override
public View getDropDownView(int position, View convertView,
ViewGroup parent) {
View view = getLayoutInflater().inflate(R.layout.textview, parent,false);
TextView tv = (TextView) view.findViewById(R.id.tv);
tv.setText(""+getItem(position));
if(spinner.getSelectedItemPosition() == position){
view.findViewById(R.id.im).setVisibility(View.VISIBLE);
}
return view;
}
};
//向spinner中添加数据
for (int i = 0; i < 5; i++) {
adapter.add("item:" + i + "");
}
//向spinner中删除数据
for (int i = 0; i < 3; i++) {
adapter.remove("item:1");
}
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this, "" + position,
Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
texiview.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/im"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center" />
</LinearLayout>
activity_main.xml:
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content" />