Spinner的定义和获取选中的值有很多种方式。
首先是定义适配器的三种方式:
1:使用数组资源, 然后在布局文件里面直接引用
android:entries="@array/city_datas"
2:使用数组资源,但是是在代码里面去获取数组资源,配合数组适配器使用
有两个spinner相关联的时候,用到数组。
- int[] city_datas = new int[]{
- R.array.city_01,
- R.array.city_02,
- R.array.city_03,
- R.array.city_04,
- R.array.city_05,
- R.array.city_06,
- R.array.city_07,
- R.array.city_08
- };
具体用法:
- ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
- R.array.myfruits//单个
- , android.R.layout.simple_spinner_item);
- // Specify the layout to use when the list of choices appears
- adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- // Apply the adapter to the spinner
- sp3.setAdapter(adapter);
3: 直接在代码里面 创建数据, 使用数组适配器(ArrayAdapter)来创建
cur_citys给定的数组元素。
- ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(SpinnerActivity.this,android.R.layout.simple_list_item_1, cur_citys);
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
4:使用BaseAdapter 来创建自定义的下拉列表中的每一个条目
- private class MyBaseAdapter extends BaseAdapter{
- //上下文
- Context context;
- public MyBaseAdapter(Context context){
- this.context=context;
- }
- //数据的数量
- @Override
- public int getCount() {
- return city_datas.length;
- }
- //获取到这个条目
- @Override
- public Object getItem(int position) {
- // TODO Auto-generated method stub
- return city_datas[position];
- }
- //获取到当前条目的id
- @Override
- public long getItemId(int position) {
- // TODO Auto-generated method stub
- return position;
- }
- //返回一个视图
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- LinearLayout layout=new LinearLayout(context);
- LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
- ViewGroup.LayoutParams.FILL_PARENT);
- layout.setOrientation(LinearLayout.HORIZONTAL);
- LinearLayout.LayoutParams params2=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT);
- TextView textView=new TextView(context);
- textView.setText(this.getItem(position).toString());
- ImageView iamge=new ImageView(context);
- iamge.setImageResource(R.drawable.icon);
- layout.addView(textView, params2);
- layout.addView(iamge, params2);
- return layout;
- }
- }
获取选中的值:
Spinner的监听事件:
- sp2.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view,
- int position, long id) {
- }
- @Override
- public void onNothingSelected(AdapterView<?> arg0) {
- // TODO Auto-generated method stub
- }
- });
1.对应上面的2和3:
通过position取得对应数组里的值。
2.通过取得spinner当前的postion获得值:
- sp2.getItemAtPosition(position).toString()
3.直接获取选中条目的内容:
- sp2.getSelectedItem().toString()