动态添加/删除的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;
}
}