Android学习之Spinner控件的使用

满城风絮 2011-09-06

在开发Android项目中,spinner控件使用的还是比较多的。下面就来讨论一下spinner的知识。以备以后自己忘记前来查阅。本节还涉及到ArrayAdatper的使用方法。

直接给定例子,离职中有详细的介绍:

在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"
    >
<Spinner
 android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/spinner"
    android:text="spinner"
/>
</LinearLayout>

 

在layout中string.xml文件的内容为:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, SpinnerActivity!</string>
    <string name="app_name">SpinnerTest</string>
   
    <string-array name="spinner">
     <item>a</item>
     <item>x</item>
     <item>d</item>
     <item>c</item>
     <item>v</item>
     <item>f</item>
    </string-array>
</resources>

 

java代码如下:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class SpinnerActivity extends Activity {
 Spinner spinner = null;
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
 
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  spinner = (Spinner) findViewById(R.id.spinner);

  /**
   * 通过createFromResource()方法创建ArrayAdapter对象
   * 第一个参数是上下文对象
   * 第二个参数引用了string.xml文件当中的数组,
   * 第三个参数用来指明spinner的样式,是一个布局id,该布局id由android系统提供,也可以替换自己定义的布局文件
   */
  ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
    this, R.array.spinner, android.R.layout.simple_spinner_item);
  //设置spinner显示的样式,引用一个android系统提供的样式,系统自带了比较多的样式,大
  //家可以选择自己喜欢的样式或客户定制的样式,当能也可以自己制定样式
  adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  spinner.setAdapter(adapter);
  spinner.setPrompt("测试");
 
  //设置spinner控件的监听器
  spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

   //当用户选定了一个条目时,就会调用该方法
   /**
    * 第一个参数:代表整个列表页就是包含所有条目的列表
    * 第二个参数:代表被选中的条目的view
    * 第三个参数:位置
    * 第四个参数:空间的id
    */
   @Override
   public void onItemSelected(AdapterView<?> parent, View view,
     int position, long id) {
    /**
     * getItemAtPosition()
     * 获取相关的数据列表中的指定位置
     */
    Toast.makeText(parent.getContext(),"The planet is "+ parent.getItemAtPosition(position).toString(),
      Toast.LENGTH_LONG).show();
   }

   @Override
   public void onNothingSelected(AdapterView<?> parent) {

   }
  });
 }
}

这样就可以控制一个spinner控件了。以上这个例子使用ArrayAdapter非常局限,很难做到动态添加数据。下面这个例子就是说明自己定义布局文件,自己用一个集合添加数据。

 

要在layout里面添加一个布局文件item.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:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/textView"
/>
</LinearLayout>


其他的和上面例子一样;看java代码:

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class SpinnerActivity extends Activity {
 Spinner spinner = null;
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
 
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
 
  spinner = (Spinner) findViewById(R.id.spinner);

  /**
   * 通过createFromResource()方法创建ArrayAdapter对象
   * 第一个参数是上下文对象
   * 第二个参数引用了string.xml文件当中的数组,
   * 第三个参数用来指明spinner的样式,是一个布局id,该布局id由android系统提供,也可以替换自己定义的布局文件
   */
  //ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.spinner, android.R.layout.simple_spinner_item);
  //设置spinner显示的样式,引用一个android系统提供的样式,系统自带了比较多的样式,大
  //家可以选择自己喜欢的样式或客户定制的样式,当能也可以自己制定样式
  //adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
 
  List<String> list = new ArrayList<String>();
  list.add("wo");
  list.add("ai");
  list.add("ni");
  /**
   * 调用ArrayAdapter的构造函数创建一个ArrayAdapter对象
   * 第一个参数指上下文
   * 第二个参数指定了下拉菜单中每一个条目的样式
   * 第三个参数指定了TextView空间的id
   * 第四个参数要添加数据的集合,为整个列表提供数据
   */
  ArrayAdapter adapter = new ArrayAdapter(this, R.layout.item, R.id.textView, list);
 
 
  spinner.setAdapter(adapter);
  spinner.setPrompt("测试");
 
  //设置spinner控件的监听器
  spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

   //当用户选定了一个条目时,就会调用该方法
   /**
    * 第一个参数:代表整个列表页就是包含所有条目的列表
    * 第二个参数:代表被选中的条目的view
    * 第三个参数:位置
    * 第四个参数:空间的id
    */
   @Override
   public void onItemSelected(AdapterView<?> parent, View view,
     int position, long id) {
    /**
     * getItemAtPosition()
     * 获取相关的数据列表中的指定位置
     */
    Toast.makeText(parent.getContext(),"The planet is "+ parent.getItemAtPosition(position).toString(),
      Toast.LENGTH_LONG).show();
   }

   @Override
   public void onNothingSelected(AdapterView<?> parent) {

   }
  });
 }
}

这样就实现了再list中望列表中动态添加数据。

相关推荐