利用這個時間,小馬來寫下如果動态添加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<String> arrayList;
private String city[];
private ArrayAdapter<String> 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<String>();
input = (EditText) findViewById(R.id.editText1);
city = new String[] { "南京", "高淳", "鎮江", "安徽",
"常州", "北京", "臨夏(小馬老家)","蘭州", "遼甯",
"大連", "蘇州", "杭州" };
// 此處教大家一個小巧門,for循環速率加快的方式,因為我們常用的是第一種方式嘛,
// 是以小馬此處隻寫出并注釋,如果朋友們想看下到底有多快,可心打開小馬的注釋,
// 開始結束時取下毫秒時間,做差就知道有多快啦,至少十個數量級哦
// 第一個,比較慢
for (int i = 0; i < city.length; i++) {
arrayList.add(city[i]);
}
/*
* //第二個,比第一個快多啦
* for(int k = city.length;k>0;k--){
* arrayList.add(city[k]);
* }
*/
// 建立并給Spinner設定擴充卡,吼吼
// 此處小馬講下,就是在建立擴充卡時盡量使用全局的,不然會出現二次建立擴充卡時第一次被覆寫的效果
adapter = new ArrayAdapter<String>(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 < 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<?> parent, View view,
int position, long id) {
tView.setText(parent.getSelectedItem().toString());
public void onNothingSelected(AdapterView<?> 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,如需轉載請自行聯系原作者