利用这个时间,小马来写下如果动态添加Spinner里面的选项的实现,相信朋友们都碰到过级联的类似省市之间的Spinner吧?原理跟小马做的简单的这个是一样的,吼吼,简单说就是:父Spinner控件选项改变影响子Spinner,子影响不到父Spinner,今天小马只讲下单个Spinner控件选项动态添加,先贴下效果较,后面贴代码:

下面来看下实现的代码,很简单的哦,主要看下实现的小巧门:

 

 
  
  1. package com.xiaoma.www; 
  2.  
  3. import java.util.ArrayList; 
  4. import java.util.List; 
  5.  
  6. import android.app.Activity; 
  7. import android.os.Bundle; 
  8. import android.view.View; 
  9. import android.view.View.OnClickListener; 
  10. import android.widget.AdapterView; 
  11. import android.widget.AdapterView.OnItemSelectedListener; 
  12. import android.widget.ArrayAdapter; 
  13. import android.widget.Button; 
  14. import android.widget.EditText; 
  15. import android.widget.Spinner; 
  16. import android.widget.TextView; 
  17. import android.widget.Toast; 
  18.  
  19. /** 
  20.  * @Title: DynamicSpinnerDemoActivity.java 
  21.  * @Package com.xiaoma.www 
  22.  * @Description: 动态添加Spinner的测试 
  23.  * @author MZH 
  24.  * @version V2.2 
  25.  */ 
  26. public class DynamicSpinnerDemoActivity extends Activity { 
  27.  
  28.     // 声明控件 
  29.     private Button add; 
  30.     private Button remove; 
  31.     private Spinner spinner; 
  32.     private EditText input; 
  33.     private List<String> arrayList; 
  34.     private String city[]; 
  35.     private ArrayAdapter<String> adapter; 
  36.     private TextView tView; 
  37.  
  38.     /** Called when the activity is first created. */ 
  39.     @Override 
  40.     public void onCreate(Bundle savedInstanceState) { 
  41.         super.onCreate(savedInstanceState); 
  42.         setContentView(R.layout.main); 
  43.  
  44.         // 因为有可能在使用此Activity时有从别的地方传过来的Intent, 
  45.         // 所以小马建议朋友们尽量不要在onCreate()方法里面写太多东西 
  46.         // 不马犯过的错是,在onCreate方法写了 太多东西,到最后都找不到合适 
  47.         // 的位置接收从其它Activity传过来的意图啦,所以此处讲下 
  48.         init(); 
  49.     } 
  50.  
  51.     /** 
  52.      * 初始化方法实现 
  53.      */ 
  54.     private void init() { 
  55.         // 定位资源 
  56.         add = (Button) findViewById(R.id.button1); 
  57.         remove = (Button) findViewById(R.id.button2); 
  58.         spinner = (Spinner) findViewById(R.id.spinner1); 
  59.         tView = (TextView) findViewById(R.id.textView1); 
  60.         arrayList = new ArrayList<String>(); 
  61.         input = (EditText) findViewById(R.id.editText1); 
  62.         city = new String[] { "南京""高淳""镇江""安徽",  
  63.                 "常州""北京""临夏(小马老家)","兰州""辽宁",  
  64.                 "大连""苏州""杭州" }; 
  65.  
  66.         // 此处教大家一个小巧门,for循环速率加快的方式,因为我们常用的是第一种方式嘛, 
  67.         // 所以小马此处只写出并注释,如果朋友们想看下到底有多快,可心打开小马的注释, 
  68.         // 开始结束时取下毫秒时间,做差就知道有多快啦,至少十个数量级哦 
  69.         // 第一个,比较慢 
  70.         for (int i = 0; i < city.length; i++) { 
  71.             arrayList.add(city[i]); 
  72.         } 
  73.  
  74.         /* 
  75.          * //第二个,比第一个快多啦  
  76.          * for(int k = city.length;k>0;k--){ 
  77.          *      arrayList.add(city[k]);  
  78.          * } 
  79.          */ 
  80.  
  81.         // 创建并给Spinner设置适配器,吼吼 
  82.         // 此处小马讲下,就是在创建适配器时尽量使用全局的,不然会出现二次创建适配器时第一次被覆盖的效果 
  83.         adapter = new ArrayAdapter<String>(this
  84.                 android.R.layout.simple_spinner_item, arrayList); 
  85.         spinner.setAdapter(adapter); 
  86.  
  87.         /** 
  88.          * 按钮监听器实现 
  89.          */ 
  90.         add.setOnClickListener(new OnClickListener() { 
  91.  
  92.             @Override 
  93.             public void onClick(View v) { 
  94.                 String aString = input.getText().toString(); 
  95.                 if (!"".equals(aString)) { 
  96.                     for (int j = 0; j < adapter.getCount(); j++) { 
  97.                         if (adapter.getItem(j).equals(aString)) { 
  98.                             return// 此处返回是为了防止添加重复 
  99.                         } 
  100.                     } 
  101.                     // 如果不存在于adapter中则添加并清空input控件 
  102.                     adapter.add(aString); 
  103.                     int pos = adapter.getPosition(aString); 
  104.                     spinner.setSelection(pos); 
  105.                     input.setText(""); 
  106.                 } 
  107.  
  108.             } 
  109.         }); 
  110.         remove.setOnClickListener(new OnClickListener() { 
  111.  
  112.             @Override 
  113.             public void onClick(View v) { 
  114.                 if (spinner.getSelectedItem() != null) { 
  115.                     adapter.remove(spinner.getSelectedItem().toString()); 
  116.                     input.setText(""); 
  117.                 } 
  118.             } 
  119.         }); 
  120.  
  121.         spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
  122.  
  123.             @Override 
  124.             public void onItemSelected(AdapterView<?> parent, View view, 
  125.                     int position, long id) { 
  126.                 tView.setText(parent.getSelectedItem().toString()); 
  127.             } 
  128.  
  129.             @Override 
  130.             public void onNothingSelected(AdapterView<?> parent) { 
  131.                 // 这个方法小马一直都没用过,不知道这个方法有什么用,知道的指点下小马,谢谢啦 
  132.             } 
  133.         }); 
  134.  
  135.     } 

     最后,如果觉得有用的话就得深究咯,实际开发中不会这么简单的,这个DEMO只是小马做的测试动态添加删除的功能,实际开发中得根据需要,自己定义实现啦,这里小马只讲下简单的实现,代码看不爽的话,下载附件,修改修改下,就是你的实现咯,吼吼,谢谢