2013年3月21日----动态添加_删除的Spinner菜单
动态添加/删除的Spinner菜单
在Android的Spinner里的元素,如果想动态的增减下拉菜单的选项,就必须利用ArrayList的依赖性来完成。
下面的应用程序设计一个EditText供用户输入文字,单击添加按钮会将文字添加进Spinner;单击“删除”按钮则删除所选择的Spinner选项,常应用于未知Spinner选项数量的To-Do List或添加维护市县数据等。下面是示例的源码:
package com.example.test01; import java.util.ArrayList;import java.util.List; import android.app.Activity;import android.os.Bundle;import android.view.Menu;importandroid.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;importandroid.view.View.OnFocusChangeListener;importandroid.view.View.OnTouchListener;importandroid.view.animation.Animation;importandroid.view.animation.AnimationUtils;importandroid.widget.AdapterView.OnItemSelectedListener;importandroid.widget.AdapterView;importandroid.widget.ArrayAdapter;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.Spinner;importandroid.widget.TextView; public class MainActivityextends Activity { TextView textView01; EditText editText01; Button buttonAdd , buttonDelete; Spinner spinner01; private static final String[] countriesStr = {"北京市" , "上海市" , "天津市" , "重庆市"}; private ArrayAdapter<String> adapter; private ArrayList<String> allCountries; Animation animation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); allCountries = new ArrayList<String>(); for (int i = 0; i < countriesStr.length; i++) { allCountries.add(countriesStr[i]); } //new ArrayAdapter对象并将allCountries传入 adapter = newArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_spinner_item , allCountries); adapter.setDropDownViewResource(R.layout.myspinner_dropdown); //以findViewById取得对象 textView01 = (TextView)findViewById(R.id.textView01); editText01 = (EditText)findViewById(R.id.editText); buttonAdd = (Button)findViewById(R.id.buttonAdd); buttonDelete = (Button)findViewById(R.id.buttonDelete); spinner01 = (Spinner)findViewById(R.id.spinner); //将ArrayAdapter添加Spinner对象中 spinner01.setAdapter(adapter); //将buttonAdd添加OnClickListener buttonAdd.setOnClickListener(new OnClickListener() { public voidonClick(View v) { String newCountry =editText01.getText().toString(); //先比较添加的值是否已存在,不存在才可以添加 for (int i = 0; i <adapter.getCount(); i++) { if(newCountry.equals(adapter.getItem(i))) { return; } } if (!newCountry.equals("")) { //将值添加到adapter adapter.add(newCountry); //取得添加的值的位置 int position =adapter.getPosition(newCountry); //将Spinner选择在添加的值的位置 spinner01.setSelection(position); //将EditText清空 editText01.setText(""); } } }); buttonDelete.setOnClickListener(new OnClickListener() { public void onClick(View v) { if (spinner01.getSelectedItem() != null){ //删除spinner的值 adapter.remove(spinner01.getSelectedItem().toString()); //将EditText清空 editText01.setText(""); if (adapter.getCount() == 0) { //将TextView清空 textView01.setText(""); } } } }); //将spinner添加OnItemSelectedListener spinner01.setOnItemSelectedListener(newSpinnerSelectListener()); } class SpinnerSelectListener implements OnItemSelectedListener { public void onItemSelected(AdapterView<?> arg0,View arg1, int arg2, long arg3) { //将所选spinner的值带入TextView中 textView01.setText(arg0.getSelectedItem().toString()); } public void onNothingSelected(AdapterView<?>arg0) {} } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action barif it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }}