Android 动态添加/删除的Spinner菜单

在Android的Spinner里的元素,若要动态增减Spinner下拉菜单的选项,就必须利用ArrayList的依赖性来完成。
  
  以下范例将设计一个EditText,当User输入了新的文字,在单击"添加"按钮的同时,就会将输入的值添加Spinner(至下拉菜单的最后一项),接着Spinner会停留在刚添加好的选项上;当单击"删除"按钮,则删除选择的Spinner选项,常应用于未知Spinner选项数量的To-DoList或添加维护市县数据等。
  
  我们来看看效果图


       Spinner添加了OnItemSelectedListener事件,当单击下拉菜单后,将值带到上方的Text- View。上一个范例在new adapter时传入String数组,这次因为要添加及删除adapter,所以要传入的是ArrayList,否则,在添加删除时会出现错误。

Java代码:
/* import程序略 */ 
public class EX04_09 extends Activity { 
private static final String[] countriesStr = { 
"北京市", "上海市", "天津市", "重庆市" 
}; 
private TextView myTextView; 
private EditText myEditText; 
private Button myButton_add; 
private Button myButton_remove; 
private Spinner mySpinner; 
private ArrayAdapter<String> adapter; 
private List<String> allCountries; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
/*加载main.xml Layout */ 
setContentView(R.layout.main); 
allCountries = new ArrayList<String>(); 
for (int i = 0; i < countriesStr.length; i++) { 
allCountries.add(countriesStr[i]); 

/* new ArrayAdapter对象并将allCountries传入 */ 
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, allCountries); adapter .setDropDownViewResource (android.R.layout.simple_spinner_dropdown_item); 
/* 以findViewById()取得对象 */ 
myTextView = (TextView) findViewById(R.id.myTextView); 
myEditText = (EditText) findViewById(R.id.myEditText); 
myButton_add = (Button) findViewById(R.id.myButton_add); 
myButton_remove = (Button) findViewById(R.id.myButton_remove); 
mySpinner = (Spinner) findViewById(R.id.mySpinner); 
/* 将ArrayAdapter添加Spinner对象中 */
mySpinner.setAdapter(adapter);
/* 将myButton_add添加OnClickListener */ 
myButton_add.setOnClickListener(new Button.OnClickListener() { 
@Override 
public void onClick(View arg0) { 
String newCountry = myEditText.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选择在添加的值的位置 */ 
mySpinner.setSelection(position); 
/* 将myEditText清空 */ 
myEditText.setText(""); 


}); 
/* 将myButton_remove添加OnClickListener */ 
myButton_remove.setOnClickListener(new Button.OnClickListener() { 
@Override 
public void onClick(View arg0) { 
if (mySpinner.getSelectedItem() != null) { 
/* 删除mySpinner的值 */ 
adapter.remove(mySpinner.getSelectedItem().toString()); 
/* 将myEditText清空 */ 
myEditText.setText(""); 
if (adapter.getCount() == 0) { 
/* 将myTextView清空 */ 
myTextView.setText(""); 



}); 
/* 将mySpinner添加OnItemSelectedListener */ 
mySpinner.setOnItemSelectedListener (new Spinner.OnItemSelectedListener() { 
@Override 
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
/* 将所选mySpinner的值带入myTextView中 */ 
myTextView.setText(arg0.getSelectedItem().toString()); 

@Override 
public void onNothingSelected(AdapterView<?> arg0) { 

}); 
}

}


       setDropDownViewResource主要是设置User单击Spinner后出现的下拉菜单样式,除了前一个范例使用自设方式改变TextView内容之外,Android也提供两种基本的样式:
       android.R.layout.simple_spinner_item:TextView的下拉菜单;
       android.R.layout.simple_spinner_dropdown_item:除了有TextView,右边还有radio的下拉菜单。
       查看Android 源代码中的simple_spinner_dropdown_item.xml,内容如下:

Java代码:
<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" 
android:layout_width="fill_parent" 
android:layout_height="?android:attr/listPreferredItemHeight" 
android:singleLine="true" style="?android:attr/spinnerDropDownItemStyle" />


       以下为自定义修改后,适用于spinner的Layout:

Java代码:
<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" 
android:layout_width="fill_parent" 
android:layout_height="12sp" 
android:singleLine="true" style="?android:attr/spinnerDropDownItemStyle" android:textSize="10sp" />

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值