博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 学习 笔记_12. Spinner的简单实使用
阅读量:6340 次
发布时间:2019-06-22

本文共 6213 字,大约阅读时间需要 20 分钟。

    Android的控件有很多种,其中就有一个Spinner的控件,这个控件其实就是一个下拉显示列表。Spinner是位于 android.widget包下的,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表中的元素同样来自适配器。Spinner是View类的一个子类。

   现在我们通过两种方式来创建Spinner加强练习。一种是静态添加,一种是动态添加。静态好理解,就是直接在String.xml 中布局,动态创建一个Spinner,就是说用户每次想创建一个下拉列表,我们不能每次都在String.xml 中敲写代码,那么我们如何动态的创建ArrayAdapter呢?

   下面是一个下拉框列表的小程序,程序主要是通过两个下拉列表实现的,第一个下拉列表是静态添加,第二个下拉列表是根据第一个列表所选的选项来动态添加下拉数据。具体的截图如下:                              

                                       

 

                                       

 MainActivity.java

1 package zzl.spinner_01;  2   3 import java.util.ArrayList;  4 import java.util.List;  5   6 import android.app.Activity;  7 import android.os.Bundle;  8 import android.view.Menu;  9 import android.view.View; 10 import android.widget.AdapterView; 11 import android.widget.AdapterView.OnItemSelectedListener; 12 import android.widget.ArrayAdapter; 13 import android.widget.Spinner; 14 import android.widget.TextView; 15 import android.widget.Toast; 16  17 public class MainActivity extends Activity { 18  19     private Spinner spinner = null; 20     private Spinner spinnerTwo = null; 21     private TextView textviewId = null; 22     String selected = null; 23     String selectedTwo = null; 24  25     @Override 26     protected void onCreate(Bundle savedInstanceState) { 27         super.onCreate(savedInstanceState); 28         setContentView(R.layout.main); 29  30         spinner = (Spinner) findViewById(R.id.spinnerId); 31         spinnerTwo = (Spinner) findViewById(R.id.spinnerTwoId); 32         System.out.println("spinner" + spinner); 33         /* 34          * 1、固定Spinner: 通过createFromResource方法创建一个ArrayAdapter对象 参数1:上下文对象; 35          * 参数2:引用String.xml中的String数组 参数3: 指定spinner的样式 36          */ 37         ArrayAdapter
adapter = ArrayAdapter.createFromResource( 38 this, R.array.array_spinner, 39 android.R.layout.simple_spinner_item); 40 /* set方法是来设置spinner中每个条目的样式 */ 41 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 42 spinner.setAdapter(adapter); 43 spinner.setPrompt("Choose"); 44 45 // 绑定监听器 46 spinner.setOnItemSelectedListener(new SpinnerSelectedListner()); 47 } 48 49 class SpinnerSelectedListner implements OnItemSelectedListener { 50 51 @Override 52 public void onItemSelected(AdapterView
adapterView, View view, 53 int position, long id) { 54 // TODO Auto-generated method stub 55 selected = adapterView.getItemAtPosition(position).toString(); 56 showToast(0, "您选择了:" + selected); 57 58 /* 59 * 2、自动添加spinner 60 */ 61 ChooseTwo(selected); 62 63 } 64 65 @Override 66 public void onNothingSelected(AdapterView
arg0) { 67 // TODO Auto-generated method stub 68 showToast(1, "您没有做选择!"); 69 } 70 71 // 第二块的 72 public void ChooseTwo(CharSequence selected) { 73 List
list = new ArrayList
(); 74 System.out.println("selected" + selected); 75 if (selected.equals("Guangdong")) {
//比较。。 76 list.add("Raoping"); 77 list.add("Guangzhou"); 78 list.add("shantou"); 79 System.out.println("selected" + selected); 80 } else 81 list.add("Nothing"); 82 ArrayAdapter adapterTwo = new ArrayAdapter(MainActivity.this, 83 R.layout.spinner_item, R.id.textviewId, list); 84 spinnerTwo.setAdapter(adapterTwo); 85 spinnerTwo.setPrompt("ChooseTwo"); 86 //spinnerTwo.setOnItemSelectedListener(new SpinnerSelectedListner()); 87 } 88 89 public void showToast(int flag, CharSequence msg) { 90 if (flag == 1) 91 Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT) 92 .show(); 93 else if (flag == 0) 94 Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT) 95 .show(); 96 } 97 } 98 99 @Override100 public boolean onCreateOptionsMenu(Menu menu) {101 // Inflate the menu; this adds items to the action bar if it is present.102 getMenuInflater().inflate(R.menu.main, menu);103 return true;104 }105 }

String.xml

1 
2
3 4
spinner_01
5
Hello world!
6
7
Guangdong
8
Fujian
9
Beijing
10
Guangxi
11
Yunnan
12
Guizhou
13
Hunan
14
Taiwan
15
Heilongjian
16
17 18

spinner_item.xml

1 

main.xml

1 
5

总结:

    (1、一开始做第一个下拉列表的时候,出现了这样的问题:

          

   而那时候第30行主要是spinner.setAdapter(adapter);这句代码,意思就是说传进来的adapter是空的,于是我加了System.out.println("spinner" + spinner);一句这样 的输出语句测试,发现spinner是空的,最后在String.xml中发现android:id="@+id/spinnerId" 写成了android:text="@+id/spinnerId" 。

      

  (2、静态添加下拉列表的关键代码莫过于:

       ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.array_spinner,android.R.layout.simple_spinner_item);

       /* set方法是来设置spinner中每个条目的样式 */
      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
      spinner.setAdapter(adapter);
      spinner.setPrompt("Choose");

       首先通过createFromResource方法创建一个ArrayAdapter对象,然后设置spinner的样式,再把adapter对象传进spinner里面。

  

       而动态添加则是:

              List<String> list = new ArrayList<String>();

              list.add("Raoping");
              list.add("Guangzhou");
              list.add("shantou");
              ArrayAdapter adapterTwo = new ArrayAdapter(MainActivity.this,R.layout.spinner_item, R.id.textviewId, list);
             spinnerTwo.setAdapter(adapterTwo);
             spinnerTwo.setPrompt("ChooseTwo"); 

      通过new一个List对象,然后再将数据添加到list中,最后,再new一个ArrayAdapter对象,再添加到Spinner中。

 (3、将showToast函数独立开来。

 (4、在将第一个列表所选的selected传进第二个列表的时候,有一个判断,就是if (selected.equals("Guangdong")),判断两个String的值是否相等,有一个地方需要注意,

    就是

         string1="aaa"; 

         string2="aaa"; 
        这两个字符串当然应该是相等的。 
        如果用表达式string1==string2,则该表达式的值为false 
        如果用表达式string1.equals(string2),则该表达式的值为true

 

转载地址:http://schoa.baihongyu.com/

你可能感兴趣的文章
ZeroTurnaround ZIP类库
查看>>
Linux 配置双机SSH信任
查看>>
Shell编程关于函数要注意的几点
查看>>
1、单机运行环境搭建之 --CentOS-6.5安装配置JDK-8
查看>>
数据可视化 方面的工具 -- 简单高效得呈现数据
查看>>
顺序结构程序代码之间的相互关系
查看>>
python excel用例123
查看>>
布隆过滤器 - URL去重,字符串去重
查看>>
chrome插件开发入门
查看>>
Azure手把手系列 3:把IT的钱花在刀刃上
查看>>
项目中copy List 数据,解决修改值后改变原值问题(SerialKiller)
查看>>
BAT及各大互联网公司2014前端笔试面试题:JavaScript篇
查看>>
续集一:我是YYF,这是我的故事
查看>>
SpringBoot文件上传异常之提示The temporary upload location xxx is not valid
查看>>
Clojure API之数组操作
查看>>
Windows下安装jmeter图文教程
查看>>
Centos6下使用SSH密钥认证登录配置
查看>>
H-WSNMS 基于网关的WSN管理架构设计
查看>>
JVM内部原理
查看>>
中国cdn市场方面有哪些特点
查看>>