zoukankan      html  css  js  c++  java
  • Android 学习 笔记_12. Spinner的简单实使用

        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<CharSequence> 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<String> list = new ArrayList<String>();
     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     @Override
    100     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 <?xml version="1.0" encoding="utf-8"?>
     2 <resources>
     3 
     4     <string name="app_name">spinner_01</string>
     5     <string name="hello_world">Hello world!</string>
     6     <string-array name="array_spinner">
     7         <item>Guangdong</item>
     8         <item>Fujian</item>
     9         <item>Beijing</item>
    10         <item>Guangxi</item>
    11         <item>Yunnan</item>
    12         <item>Guizhou</item>
    13         <item>Hunan</item>
    14         <item>Taiwan</item>
    15         <item>Heilongjian</item>
    16     </string-array>
    17 
    18 </resources>

    spinner_item.xml

    1 <TextView
    2         android:id="@+id/textviewId" 
    3         android:layout_width="fill_parent"
    4         android:layout_height="wrap_content"/>

    main.xml

    1 <Spinner
    2         android:id="@+id/spinnerId" 
    3         android:layout_width="fill_parent"
    4         android:layout_height="wrap_content"/>
    5     <Spinner
    6         android:id="@+id/spinnerTwoId" 
    7         android:layout_width="fill_parent"
    8         android:layout_height="wrap_content"/>

    总结:

        (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

  • 相关阅读:
    TP5.1 路由验证器验证返回json提示
    win10 docker ubuntu14.04 php 编译安装 php7.3.20
    ubuntu15.10 sources.list 修改
    秒杀系统设计
    class命名规范
    php实现阿里云签名类
    【小程序】应用的生命周期,页面的生命周期
    php.ini配置文件参数中文说明文档
    tp5.1 nginx配置
    phpstudycomposer thinkPHP5.1 使用
  • 原文地址:https://www.cnblogs.com/daomul/p/2952660.html
Copyright © 2011-2022 走看看