Android中动态添加╱删除的Spinner菜单 — ArrayList与Widget的依赖性

例子效果图

 

 

 

实现步骤

 

第一步 :建 Android 工程: SpinnerDemo

                                                                   

第二步 :编写 Activity 的子类别: SpinnerDemo ,其程序代码如下:

 

package com.a3gs.spinner;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.*;

 

public class SpinnerDemo extends Activity {

    private TextView myTV;

    private Spinner mySp;

    private EditText myET;

    private Button addBtn, delBtn;

    private final String[] items = {" 北京市 ", " 上海市 ", " 天津市 ", " 福州市 "} ;

    private ArrayAdapter<String> adapter;

    private List<String> allItems;

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

       

        myTV = (TextView) findViewById(R.id.myTV);

        myET = (EditText) findViewById(R.id.myET);

        addBtn = (Button) findViewById(R.id.addBtn);

        delBtn = (Button) findViewById(R.id.delBtn);

        mySp = (Spinner) findViewById(R.id.mySpinner);

        mySp.setVisibility(View.VISIBLE);

        allItems = new ArrayList<String>();

        for(int i=0; i < items.length; i++){

            allItems.add(items[i]);

        }

        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, allItems);

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        mySp.setAdapter(adapter);

        mySp.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){

           @Override

           public void onItemSelected(AdapterView<?> arg0, View arg1,

                  int arg2, long arg3) {

              // TODO Auto-generated method stub

              myTV.setText(" 您选择的是: " + mySp.getSelectedItem().toString());

           }

           @Override

           public void onNothingSelected(AdapterView<?> arg0) {

              // TODO Auto-generated method stub

           }           

        });

       

        addBtn.setOnClickListener(new Button.OnClickListener(){

           @Override

           public void onClick(View v) {

              // TODO Auto-generated method stub

              String ETText = myET.getText().toString();

              int len = adapter.getCount();

              // 检查所添加的是否已经存在

              for(int i = 0; i < len; i++){

                  if(ETText.equals(adapter.getItem(i))){

                     return;

                  }

              }

             

              if(!ETText.equals("")){

                  adapter.add(ETText);

                  int position = adapter.getPosition(ETText);

                  mySp.setSelection(position);

                  myET.setText("");

              }

           }           

        });

       

        delBtn.setOnClickListener(new Button.OnClickListener(){

           @Override

           public void onClick(View v) {

              // TODO Auto-generated method stub

              if(mySp.getSelectedItem() !=  null) {

                  adapter.remove(mySp.getSelectedItem().toString());

                  myET.setText("");

              }

              if(adapter.getCount() == 0){

                  myET.setText("");

              }

           }

        });

    }

}

 

第三步 :修改 res/layout/main.xml ,其代码如下:

 

<? xml version = "1.0" encoding = "utf-8" ?>

< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"

    android:orientation = "vertical"

    android:layout_width = "fill_parent"

    android:layout_height = "fill_parent"

    >

< TextView 

    android:id = "@+id/myTV"

    android:layout_width = "fill_parent"

    android:layout_height = "wrap_content"

    android:text = "@string/hello"

    />

< EditText 

    android:id = "@+id/myET"

    android:layout_width = "fill_parent"

    android:layout_height = "wrap_content"

    />

< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"

    android:orientation = "horizontal"

    android:layout_width = "fill_parent"

    android:layout_height = "wrap_content"

    >

    < Button

       android:id = "@+id/addBtn"

        android:layout_width = "160sp"

        android:layout_height = "wrap_content"

        android:text = "@string/btn_text1"

        />

    < Button

       android:id = "@+id/delBtn"

        android:layout_width = "160sp"

        android:layout_height = "wrap_content"

        android:text = "@string/btn_text2"

        />

</ LinearLayout >

< Spinner

    android:id = "@+id/mySpinner"

    android:layout_width = "fill_parent"

    android:layout_height = "wrap_content"

    />

</ LinearLayout >

第四步 :修改 res/layout/spinner_dropdown.xml ,其代码如下:

 

<? xml version = "1.0" encoding = "utf-8" ?>

< TextView 

    xmlns:android = "http://schemas.android.com/apk/res/android"

    android:id = "@+id/text"

    android:layout_width = "wrap_content"

    android:layout_height = "25sp"

    android:singleLine = "true"

    style = "?android:attr/spinnerDropDownItemStyle"

    />

 

扩展学习

 

setDropDownViewResource 主要是设置 User 点击 Spinner 后出现的下拉菜单样式,除了前一个范例使用自设方式改变 TextView 内容之外, android 亦提供两种基本的样式:

 android.R.layout.simple_spinner_itemTextView 的下拉菜单。

 android.R.layout.simple_spinner_dropdown_item :除了有 TextView ,右边有 radio 的下拉菜单。

 

查看 Android 源代码中的 simple_spinner_drop, , down_item.xml ,内容如下:

<?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

<?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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值