第一次学Spinner控件,想记录一些东西,我是参考http://blog.csdn.net/developer_jiangqq/article/details/7285623这篇文章进行学习的,只是想将自己理解的东西记录下来
想实现的功能:想看一下下拉菜单Spinner长什么样,就做了个实例
要做的事:(都比较简单)
1、在布局文件添加Spinner控件
2、为Spinner的显示准备数据
3、设置适配器
4、监听事件
代码:
在xml文件中添加组件,说明宽高属性就可以
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
在value文件夹中新建xml文件,为显示准备数据
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="spinnername">
<item>北京</item>
<item>上海</item>
<item>广州</item>
<item>深圳</item>
<item>汕尾</item>
</string-array>
</resources>
spinner = (Spinner)findViewById(R.id.spinner);
//获取数据
String[] mItems = getResources().getStringArray(R.array.spinnername);
//创建适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, mItems);
//设置适配器
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Log.d("Spinner", "onItemSelected方法里面,position:"+position);
String string = parent.getItemAtPosition(position).toString();
Toast.makeText(MainActivity.this, "你点击的是:"+string, 2000).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
Log.d("Spinner", "onNothingSelected方法里面");
}
});
监听事件是重写两个方法,注意监听接口不是setOnItemOnClickListener
log显示的是: onItemSelected方法里面,position:4
但是onNothingSelected方法里面的log并没有显示,并且一开始就已经默认选中postion为0的第一个,所以该方法没有被调用
结果
//-------------------------------------------------------------------------------------------分割线------------------------------------------------------------------------------
上面是实现一个最简单的一个Spinner 的显示,除此之外我们还可以自定义适配器,这样就可以设置下拉菜单中子项中的布局,更加灵活
要实现的功能是:自定义适配器实现菜单自定义布局
要做的事:
1、创建菜单布局文件
2、创建Person类
3、自定义适配器
3、设置并显示以及监听事件都是跟上面一样的
代码:
在layout文件夹中创建菜单布局文件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" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"/>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
创建Person类作为数据提供
package com.example.spinnerte;
public class Person {
String personName="";
String address="";
public Person(String personName, String address){
super();
this.address = address;
this.personName = personName;
}
public String getPersonName() {
return personName;
}
public void setPersonName(String personName) {
this.personName = personName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
创建适配器,继承BaseAdapter,作为内部类放在MainActivity里面
class MyAdapter extends BaseAdapter{
List<Person> list;
Context context;
public MyAdapter(Context context, List<Person> list){
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
convertView = inflater.inflate(R.layout.item, null);
if(convertView != null){
TextView textView1 = (TextView)convertView.findViewById(R.id.textView1);
TextView textView2 = (TextView)convertView.findViewById(R.id.textView2);
textView1.setText(list.get(position).getPersonName());
textView2.setText(list.get(position).getAddress());
}
return convertView;
}
}
List<Person> list = new ArrayList<Person>();
list.add(new Person("名字1","地址1"));
list.add(new Person("名字2","地址2"));
list.add(new Person("名字3","地址3"));
list.add(new Person("名字4","地址4"));
MyAdapter adapter2 = new MyAdapter(this, list);
spinner.setAdapter(adapter2);
结果