利用这个时间,小马来写下如果动态添加Spinner里面的选项的实现,相信朋友们都碰到过级联的类似省市之间的Spinner吧?原理跟小马做的简单的这个是一样的,吼吼,简单说就是:父Spinner控件选项改变影响子Spinner,子影响不到父Spinner,今天小马只讲下单个Spinner控件选项动态添加,先贴下效果较,后面贴代码:
下面来看下实现的代码,很简单的哦,主要看下实现的小巧门:
- package com.xiaoma.www;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemSelectedListener;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Spinner;
- import android.widget.TextView;
- import android.widget.Toast;
- /**
- * @Title: DynamicSpinnerDemoActivity.java
- * @Package com.xiaoma.www
- * @Description: 动态添加Spinner的测试
- * @author MZH
- * @version V2.2
- */
- public class DynamicSpinnerDemoActivity extends Activity {
- // 声明控件
- private Button add;
- private Button remove;
- private Spinner spinner;
- private EditText input;
- private List<String> arrayList;
- private String city[];
- private ArrayAdapter<String> adapter;
- private TextView tView;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // 因为有可能在使用此Activity时有从别的地方传过来的Intent,
- // 所以小马建议朋友们尽量不要在onCreate()方法里面写太多东西
- // 不马犯过的错是,在onCreate方法写了 太多东西,到最后都找不到合适
- // 的位置接收从其它Activity传过来的意图啦,所以此处讲下
- init();
- }
- /**
- * 初始化方法实现
- */
- private void init() {
- // 定位资源
- add = (Button) findViewById(R.id.button1);
- remove = (Button) findViewById(R.id.button2);
- spinner = (Spinner) findViewById(R.id.spinner1);
- tView = (TextView) findViewById(R.id.textView1);
- arrayList = new ArrayList<String>();
- input = (EditText) findViewById(R.id.editText1);
- city = new String[] { "南京", "高淳", "镇江", "安徽",
- "常州", "北京", "临夏(小马老家)","兰州", "辽宁",
- "大连", "苏州", "杭州" };
- // 此处教大家一个小巧门,for循环速率加快的方式,因为我们常用的是第一种方式嘛,
- // 所以小马此处只写出并注释,如果朋友们想看下到底有多快,可心打开小马的注释,
- // 开始结束时取下毫秒时间,做差就知道有多快啦,至少十个数量级哦
- // 第一个,比较慢
- for (int i = 0; i < city.length; i++) {
- arrayList.add(city[i]);
- }
- /*
- * //第二个,比第一个快多啦
- * for(int k = city.length;k>0;k--){
- * arrayList.add(city[k]);
- * }
- */
- // 创建并给Spinner设置适配器,吼吼
- // 此处小马讲下,就是在创建适配器时尽量使用全局的,不然会出现二次创建适配器时第一次被覆盖的效果
- adapter = new ArrayAdapter<String>(this,
- android.R.layout.simple_spinner_item, arrayList);
- spinner.setAdapter(adapter);
- /**
- * 按钮监听器实现
- */
- add.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- String aString = input.getText().toString();
- if (!"".equals(aString)) {
- for (int j = 0; j < adapter.getCount(); j++) {
- if (adapter.getItem(j).equals(aString)) {
- return; // 此处返回是为了防止添加重复
- }
- }
- // 如果不存在于adapter中则添加并清空input控件
- adapter.add(aString);
- int pos = adapter.getPosition(aString);
- spinner.setSelection(pos);
- input.setText("");
- }
- }
- });
- remove.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (spinner.getSelectedItem() != null) {
- adapter.remove(spinner.getSelectedItem().toString());
- input.setText("");
- }
- }
- });
- spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view,
- int position, long id) {
- tView.setText(parent.getSelectedItem().toString());
- }
- @Override
- public void onNothingSelected(AdapterView<?> parent) {
- // 这个方法小马一直都没用过,不知道这个方法有什么用,知道的指点下小马,谢谢啦
- }
- });
- }
- }
最后,如果觉得有用的话就得深究咯,实际开发中不会这么简单的,这个DEMO只是小马做的测试动态添加删除的功能,实际开发中得根据需要,自己定义实现啦,这里小马只讲下简单的实现,代码看不爽的话,下载附件,修改修改下,就是你的实现咯,吼吼,谢谢
附件:http://down.51cto.com/data/2359582
本文转自华华世界 51CTO博客,原文链接:http://blog.51cto.com/mzh3344258/753402,如需转载请自行联系原作者