1. 什么是Spinner?
Spinner是一个在手机上显示的下拉菜单
2. 如何声明一个Spinner?
静态布局:
1).在布局文件中使用:
<Spinner android:id=”@+id/spinnerId” android:layout_width=”match_parent” android:layout_height=”wrap_content”/>
来声明。
注意:是大写的Spinner,而非spinner,若写成小写的,则会报错:
android.view.InflateException: Binary XML file line #8: Error inflating class spinner
2).在string.xml中定义一个数组:
<string-array name=” bankArray”> <item>工商银行</item>\ <item>招商银行</item> <item>中国银行</item> <item>……</item> </string-array>
3).创建一个ArrayAdapter
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.bankArray, android.R.layout.simple_spinner_item); // android.R.layout.simple_spinner_item是android自带的一个布局文件,用于定义下拉菜单点击之前的样式 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// android.R.layout.simple_spinner_dropdown_item也是android自带的一个布局文件,用于定义点击下拉菜单弹出来的界面样式
4).得到Spinner对象,并设置适配器
spinner = (Spiinner)findViewById(R.id.spinnerId); spinner.setAdapter(adapter); spinner.setPrompt(“请选择银行”);//设置弹出的下拉列表的标题
5).创建监听器(实现android.widget.AdapterView.OnItemSelectedListener接口)
class SpinnerOnSelectedListener implements OnItemSelectedListener{ @Override//选择了某一个条目执行的方法 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { //参数1:整个列表对象;2:点击的控件 //3:点击控件在父控件中的位置;4:选中条目的row id String selected = parent.getItemAtPosition(position).toString(); System.out.println(selected); } @Override//什么都没选择的时候执行的方法 public void onNothingSelected(AdapterView<?> parent) { System.out.println("Noting selected"); } }
6).为spinner绑定监听器
spinner.setOnItemSelectedListener(new SpinnerOnSelectedListener());
3. ArrayAdapter的另一种用法:
除了可以使用strings.xml文件当中的数组创建ArrayAdapter之外,还可以动态的创建ArrayAdapter:
List<String> list = new ArrayList<String>(); //注意:这里我直接使用了List<String>,这个list中存的就是String。如果不是,那么控件显示的内容则为该对象调用toString()方法后的内容。 list.add(“test1”); list.add(“test2”); ……
//这里调用ArrayAdapter的构造函数来创建,参数依次为:上下文、显示条目的布局文件、使用的TextView的ID、要显示的数据
//这句话的意思就相当于是:把list中的每一个元素用一个R.id.textViewId显示,样式为R.layout.item。
ArrayAdapter adapter = new ArrayAdapter(this, R.layout.item, R.id.textViewId, list);
下面是item.xml布局文件(这里为了简单起见,只定义了ID、宽和高,各种样式已经省略):
<LinearLayout ……. <TextView id=”@+id/textViewId” android:layout_width=”wrap_content” android:layout_height=”wrap_content” /> </LinearLayout>
注意蓝色的字体为布局文件,红色的为控件的ID,二者必须和new ArrayAdapter的参数对应。
这样就可以不把数据写死,可以灵活运用。