Hello Views之Spinner(yaozq翻译,仅供参考)

Spinner是一种类似于下拉列表的widget。

在这个教程中,你将创建一个简单的用于展示星球列表的spinner组件。当选择列表中的一项时,将会弹出一个表示所选项的toast信息。下面是具体步骤:

1,新建一个名为HelloSpinner的项目。

2,打开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:padding="10dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_marginTop="10dip"
  android:text="@string/planet_prompt"
/>
<Spinner
android:id="@+id/spinner"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:prompt="@string/planet_prompt"
/>
</LinearLayout>


有一点要注意的是TextView的android:text属性和Spinner的android:prompt属性都引用了相同的字符串资源。这个字符串是被用来做spinner的标题的。当应用于Spinner的时候,这个字符串文本将出现在现则列表的的最上部。

3,在res/values目录下创建一个stings.xml文件,并按如下方式编辑:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="planet_prompt">Choose a planet</string>
<string-array name="planets_array">
  <item>Mercury</item>
  <item>Venus</item>
  <item>Earth</item>
  <item>Mars</item>
  <item>Jupiter</item>
  <item>Saturn</item>
  <item>Uranus</item>
  <item>Neptune</item>
  <string-array>
</resources>

标签<string>是前面TextView和Spinner都引用的标题字符串。<string-array>元素定义了将要在Spinner中列出的字符串列表。

4,打开HelloSpinner.java文件,并将下面的代码插入到onCreate()方法中:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Spinner spinner = (Spinner) findViewById(R.id.spinner); 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( 
            this, R.array.planets_array, android.R.layout.simple_spinner_item); 
   adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 
}

在设置main.xml文件作为content view之后,又通过findViewById(int)找到Spinner组件。然后createFromResource()方法创建了一个新的ArrayAdapter,这个ArrayAdapter将用于初始Spinner列表的字符串数组中的每一个item绑定上。R.array.planets_array ID引用了在上面定义的string_array,而android.R.layout.simple_spinner_item这个ID则引用了由系统定义的一个标准spinner样式(appearance)。然后调用setDropDownViewResource(int)来定义当spinner被打开的时候每一个item的appearance(simple_spinner_dropdown_item是系统定义另一个标准布局)。最后通过调用setAdapter(T),ArrayAdapter和它所有的item就关联在一起了。

5,通过实现AdapterView.OnItemSelectedListener创建一个内部类。当Spinner中的item被选择的时候这个函数将会提供一个回调方法。下面就是这个内部类:

    public class MyOnItemSelectedListener implements OnItemSelectedListener {
    public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) {            
      Toast.makeText(parent.getContext(), "The planet is " +  parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();            
    }        
  public void onNothingSelected(AdapterView<?> parent) {
        // Do nothing.
   }
}


这个AdapterView.OnItemSelectedListerer需要onItemSelected()和onNothingSelected()回调方法。前面那个回调方法将在AdapterView中的item被选择的时候调用,这时,一个Toast信息将会被弹出,后面的回调方法会在when a selection disappears from the AdapterView时被调用,这个例子中不考虑。

6,然后将这个MyOnItemSelectedListener应用到Spinner,方法是在onCreate()方法中添加如下代码:

spinner.setOnItemSelectedListerner(new MyOnItemSelectedListener() );

这样就创建了一个MyOnItemSelectedListener匿名内部类,并被设为Spinner的监听器。

7,运行程序。得到如下结果:

wps_clip_image-32697

posted @ 2012-03-01 09:50  yaozq  阅读(222)  评论(0)    收藏  举报