六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 42|回复: 0

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

[复制链接]

升级  2%

58

主题

58

主题

58

主题

举人

Rank: 3Rank: 3

积分
206
 楼主| 发表于 2013-1-15 02:35:20 | 显示全部楼层 |阅读模式
例子效果图
 
 

 
实现步骤
 
第一步:建立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);

        }

        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_item:TextView 的下拉菜单。

 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"

/>
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表