Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说android学习,spinner,希望能够帮助你!!!。
下拉菜单 ,在任何程序里都是个很重要的东西,spinner和listview有点相似,先做个简单的例子吧。
在activity_main里添加spinner。
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginLeft="4dp"
android:layout_marginTop="44dp"
android:entries="@array/spingarr"
android:background="#00ff00"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
再在values目录下的strings.xml里添加字符数组。
<string-array name="spingarr">
<item>北京</item>
<item>上海</item>
<item>广州</item>
<item>深圳</item>
</string-array>
这样,一个简单的spinner就设置完成了。当然需要在里面添加选择事件监听。下面的代码添加到onCreate的里面。
TextView tv=findViewById(R.id.hello);//得到textView控件
Spinner myspinner = findViewById(R.id.spinner);//得到spinner控件
//选择监听
myspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String strs[]=getResources().getStringArray(R.array.spingarr);//得到字符串数组
tv.setText("your choice is "+strs[position]);//把选取的相应的项目的字符赋值给TextView。
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
下面再来个能实际应用的复杂一点的:
首先也是在activity_main里添加一个spinner组件。
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="1dp"
android:layout_marginLeft="1dp"
android:layout_marginTop="10dp"
android:background="#ff00ff"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
这时,这个spinner控件里没有任何内容,内容在MainActivity里添加。
在添加之前,需要准备一个数据类,一个适配类。
public class Person {
public Person(String name, String city, int age) {
this.name = name;
this.city = city;
this.age = age;
}
String name;
String city;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class MyAdapter extends BaseAdapter {//继承自BaseAdapter类,需要重写下面4个方法,
//为了能把数据传进来,设置了一个数据类对象和一个上下文对象
private List<Person> data;
private Context context;
//实例化对象的时候就把需的内容传进来。
public MyAdapter(List<Person> data, Context context) {
this.data = data;
this.context = context;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh
if(convertView==null) {//如果当前没有界面对象传进来。
vh=new ViewHolder();
LayoutInflater layoutInflater = LayoutInflater.from(context);
convertView = layoutInflater.inflate(R.layout.show_item, parent, false);//得到当前的listitem界面
vh.tvname=convertView.findViewById(R.id.tv_name);
vh.tvcity=convertView.findViewById(R.id.tv_city);
vh.tvage=convertView.findViewById(R.id.tv_age);
convertView.setTag(vh);//标记并保存这个内部类对象。
}else{
vh= (ViewHolder) convertView.getTag();//取出标记的内部类对象。
}
vh.tvname.setText(data.get(position).getName());
vh.tvcity.setText(data.get(position).getCity());
vh.tvage.setText(String.valueOf(data.get(position).getAge()));//此处如果不是字符会报错
return convertView;
}
//设置这个内部final类,是为了减少程序重复。
private final class ViewHolder{
TextView tvname;
TextView tvcity;
TextView tvage;
}
}
以上两个类写好了,再在onCreate里添加以下内容。
List<Person> personList=new ArrayList<Person>();//创建类集合,
//填充数据到类集合,
personList.add(new Person("张三", "上海 ",20));
personList.add(new Person("李四", "上海 ",32));
personList.add(new Person("王五", "北京" ,18));
personList.add(new Person("赵六", "广州 ",28));
Spinner spinner=findViewById(R.id.spinner);//得到当前的spinner对象
spinner.setAdapter(new MyAdapter(personList,this));//新建适配类并关联到spinner对象
//给spinner对象添加一个已选择对象的事件监听。
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//通过spinner的适配对象得到当然的数据类对象
Person person = (Person) spinner.getAdapter().getItem(position);
Log.e("liao", "onItemSelected: "+person.name+" " +person.city+" "+
person.age);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
这个数据集里需要一个person类,建立一个
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。