大家好,欢迎来到IT知识分享网。
下拉菜单 ,在任何程序里都是个很重要的东西,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类,建立一个
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/61171.html