天天看點

動态添加/删除spinner菜單

抽空寫了下動态添加/删除spinner菜單的demo,越學越發現現下掌握的都是些很基礎的小知識呀,加油!
 其實就是維護adapter中的資料,這樣spinner中就會相應而改變啦。


有幾個注意點,代碼中已經辨別出來了。還有adapter和spinner中的部分函數要熟練應用就ok!

package com.esun.cxyz;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class MainAct extends Activity {
    private TextView tv;
    private EditText et;
    private Button   bt_add;
    private Button   bt_del;
    private Spinner  spinner;
    private ArrayAdapter<String> adapter;
    private List<String> allCountries;
    
    private static final String[] sountries = {
    	"天津", "北京", "香港", "濰坊"
    };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        init();
        
        spinner.setAdapter(adapter);
        
        // 添加單擊事件
        bt_add.setOnClickListener(btAddListener);
        
        bt_del.setOnClickListener(btDelListener);
        
        spinner.setOnItemSelectedListener(spinnerListener);
        
        
    }
    
    // 添加按下
    private Button.OnClickListener btAddListener = new Button.OnClickListener () {

		@Override
		public void onClick(View v) {
			String newCountry = et.getText().toString();
			if (newCountry != null) {
				allCountries.add(newCountry);
			} else {
				Toast.makeText(MainAct.this, "請先輸入城市名稱", Toast.LENGTH_LONG).show();
			}
			
			int pos = adapter.getPosition(newCountry);
			
			spinner.setSelection(pos);
			
			tv.setText(" ");
			et.setText(" ");
		}
    	
    };
    
    // 删除按下
    private Button.OnClickListener btDelListener = new Button.OnClickListener () {

		@Override
		public void onClick(View v) {
			if (spinner.getSelectedItem() != null) {
				adapter.remove(spinner.getSelectedItem().toString());
				et.setText("");
				
				if (adapter.getCount() == 0) {
					et.setText("");
				}
			}
		}
    	
    };
    
    // Spinner監聽事件
    private Spinner.OnItemSelectedListener spinnerListener = new Spinner.OnItemSelectedListener() {

		@Override
		public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
				long arg3) {
			tv.setText(spinner.getSelectedItem().toString());
			
		}

		@Override
		public void onNothingSelected(AdapterView<?> arg0) {
			// TODO Auto-generated method stub
			
		}
    	
    };
    
    // 初始化
    public void init() {
    	tv = (TextView)findViewById(R.id.tv);
    	et = (EditText)findViewById(R.id.et);
    	bt_add = (Button)findViewById(R.id.bt_add);
    	bt_del = (Button)findViewById(R.id.bt_del);
    	spinner = (Spinner)findViewById(R.id.spinner);
    	
    	allCountries = new ArrayList<String>();
    	// 這兒是需要注意的填充List
    	for (int i = 0; i < sountries.length; i ++) {
    		if (sountries[i].length() != 0) {
    			allCountries.add(sountries[i]);
    		}
    	}
    	
    	// 這兒要給ArrayAdapter傳List(allCountries),否則會出錯
    	adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,allCountries);
    	adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    }
}
           

運作效果:

動态添加/删除spinner菜單
動态添加/删除spinner菜單