天天看點

動态添加Spinner項小巧門

      利用這個時間,小馬來寫下如果動态添加Spinner裡面的選項的實作,相信朋友們都碰到過級聯的類似省市之間的Spinner吧?原理跟小馬做的簡單的這個是一樣的,吼吼,簡單說就是:父Spinner控件選項改變影響子Spinner,子影響不到父Spinner,今天小馬隻講下單個Spinner控件選項動态添加,先貼下效果較,後面貼代碼:

<a target="_blank" href="http://blog.51cto.com/attachment/201112/025811830.jpg"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201112/025830534.jpg"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201112/025823779.jpg"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201112/025817435.jpg"></a>

下面來看下實作的代碼,很簡單的哦,主要看下實作的小巧門:

package com.xiaoma.www; 

import java.util.ArrayList; 

import java.util.List; 

import android.app.Activity; 

import android.os.Bundle; 

import android.view.View; 

import android.view.View.OnClickListener; 

import android.widget.AdapterView; 

import android.widget.AdapterView.OnItemSelectedListener; 

import android.widget.ArrayAdapter; 

import android.widget.Button; 

import android.widget.EditText; 

import android.widget.Spinner; 

import android.widget.TextView; 

import android.widget.Toast; 

/** 

 * @Title: DynamicSpinnerDemoActivity.java 

 * @Package com.xiaoma.www 

 * @Description: 動态添加Spinner的測試 

 * @author MZH 

 * @version V2.2 

 */ 

public class DynamicSpinnerDemoActivity extends Activity { 

    // 聲明控件 

    private Button add; 

    private Button remove; 

    private Spinner spinner; 

    private EditText input; 

    private List&lt;String&gt; arrayList; 

    private String city[]; 

    private ArrayAdapter&lt;String&gt; adapter; 

    private TextView tView; 

    /** Called when the activity is first created. */ 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.main); 

        // 因為有可能在使用此Activity時有從别的地方傳過來的Intent, 

        // 是以小馬建議朋友們盡量不要在onCreate()方法裡面寫太多東西 

        // 不馬犯過的錯是,在onCreate方法寫了 太多東西,到最後都找不到合适 

        // 的位置接收從其它Activity傳過來的意圖啦,是以此處講下 

        init(); 

    } 

    /** 

     * 初始化方法實作 

     */ 

    private void init() { 

        // 定位資源 

        add = (Button) findViewById(R.id.button1); 

        remove = (Button) findViewById(R.id.button2); 

        spinner = (Spinner) findViewById(R.id.spinner1); 

        tView = (TextView) findViewById(R.id.textView1); 

        arrayList = new ArrayList&lt;String&gt;(); 

        input = (EditText) findViewById(R.id.editText1); 

        city = new String[] { "南京", "高淳", "鎮江", "安徽",  

                "常州", "北京", "臨夏(小馬老家)","蘭州", "遼甯",  

                "大連", "蘇州", "杭州" }; 

        // 此處教大家一個小巧門,for循環速率加快的方式,因為我們常用的是第一種方式嘛, 

        // 是以小馬此處隻寫出并注釋,如果朋友們想看下到底有多快,可心打開小馬的注釋, 

        // 開始結束時取下毫秒時間,做差就知道有多快啦,至少十個數量級哦 

        // 第一個,比較慢 

        for (int i = 0; i &lt; city.length; i++) { 

            arrayList.add(city[i]); 

        } 

        /* 

         * //第二個,比第一個快多啦  

         * for(int k = city.length;k&gt;0;k--){ 

         *      arrayList.add(city[k]);  

         * } 

         */ 

        // 建立并給Spinner設定擴充卡,吼吼 

        // 此處小馬講下,就是在建立擴充卡時盡量使用全局的,不然會出現二次建立擴充卡時第一次被覆寫的效果 

        adapter = new ArrayAdapter&lt;String&gt;(this, 

                android.R.layout.simple_spinner_item, arrayList); 

        spinner.setAdapter(adapter); 

        /** 

         * 按鈕監聽器實作 

        add.setOnClickListener(new OnClickListener() { 

            @Override 

            public void onClick(View v) { 

                String aString = input.getText().toString(); 

                if (!"".equals(aString)) { 

                    for (int j = 0; j &lt; adapter.getCount(); j++) { 

                        if (adapter.getItem(j).equals(aString)) { 

                            return; // 此處傳回是為了防止添加重複 

                        } 

                    } 

                    // 如果不存在于adapter中則添加并清空input控件 

                    adapter.add(aString); 

                    int pos = adapter.getPosition(aString); 

                    spinner.setSelection(pos); 

                    input.setText(""); 

                } 

            } 

        }); 

        remove.setOnClickListener(new OnClickListener() { 

                if (spinner.getSelectedItem() != null) { 

                    adapter.remove(spinner.getSelectedItem().toString()); 

        spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

            public void onItemSelected(AdapterView&lt;?&gt; parent, View view, 

                    int position, long id) { 

                tView.setText(parent.getSelectedItem().toString()); 

            public void onNothingSelected(AdapterView&lt;?&gt; parent) { 

                // 這個方法小馬一直都沒用過,不知道這個方法有什麼用,知道的指點下小馬,謝謝啦 

     最後,如果覺得有用的話就得深究咯,實際開發中不會這麼簡單的,這個DEMO隻是小馬做的測試動态添加删除的功能,實際開發中得根據需要,自己定義實作啦,這裡小馬隻講下簡單的實作,代碼看不爽的話,下載下傳附件,修改修改下,就是你的實作咯,吼吼,謝謝

<a href="http://down.51cto.com/data/2359582" target="_blank">附件:http://down.51cto.com/data/2359582</a>

     本文轉自華華世界 51CTO部落格,原文連結:http://blog.51cto.com/mzh3344258/753402,如需轉載請自行聯系原作者

繼續閱讀