Spinner(1): 由SDK引发的问题

Spinner 类似 widget,sdk_api 文档上面有这样一句话:

Spinner is a widget similar to a drop-down list for selecting items.照着官网的例子,先给没用过Spinner的同志扫扫盲,step by step 吧!

1. 新建项目 SpinnerUsedResources

这个名称主要是想说明该项目,用的是现有资源,即静态创建 Spinner所需资源。

2. 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> 3. Strings.xml

该文件位于项目 /res/values 下,具体代码:

<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, SpinnerUsedResourcesActivity!</string> <string name="app_name">SpinnerUsedResources</string> <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-array></string-array>标签用来声明String数组,该数组的名称是planets_array(有了名字我们就可以在代码中调用它!)当然你也可以在代码中自己new String[ ] ,随你便。

另外,还可以获得数组的值:

Resources res = getResources(); String[] planets = res.getStringArray(R.array.planets_array);

4. Activity代码

package mark.zhang; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.Toast; public class SpinnerUsedResourcesActivity extends Activity { @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); spinner.setOnItemSelectedListener(new MyOnItemSelectedListener()); } /** * @author mark * 内部类 */ 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. } } } 5. 运行

soory,程序异常终止!看看Log,说spinner是NullPointer!怎么可能呢?纠结了一会,Debug、看源码,都没有找到答案。呜呼!

木有办法,在main.xml文件中修改 spinner的id,然后运行,居然ok!最终,我又将main.xml文件中的spinner的id改为spinner,运行也没错。晕!

效果图:


6. 思考

既然在strings.xml文件可以声明数组,那么还有没有其它办法创建数组呢?

答案是肯定的。

在/res/values下,新建android xml文件arrays.xml。

代码内容如下:

<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="planets_array2"> <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> 注意,该数组名称是planets_array2,在SpinnerUsedResourcesActivity代码onCreate方法中作如下修改:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.planets_array2, android.R.layout.simple_spinner_item);运行效果是一样的。

关于动态添加Spinner内容,关注下篇博客。


感谢:sdk-path/docs/resources/tutorials/views/hello-spinner.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值