Spinner(1): 由SDK引发的问题
来源:互联网 发布:中超后卫数据 编辑:程序博客网 时间:2024/05/24 05:53
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 {@Overridepublic 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
- Spinner(1): 由SDK引发的问题
- 由Typedef引发的问题
- 由UseSubmitBehavior引发的问题
- 由static引发的问题
- 由引用引发的问题
- 由LaunchMode引发的问题
- 由++操作引发的问题
- 由const引发的版本控制问题
- 由一个问题引发的思考
- 由py2exe引发的问题及解决方案
- 由object不能比较引发的问题
- 由 EditorBrowableAttribute 引发的一些问题
- 由py2exe引发的问题及解决方案
- 由n阶幻方问题引发的思考
- 由webdings引发的乱码问题
- C/C++ 由fopen_s引发的问题
- 由jboss引发的 source level 问题
- 由localtime引发的函数可重入问题
- SHA|MessageDigest
- xen toolstack - xen api
- 根据xsd生成xml文档
- Transfer与Redirect区别
- windows 核心编程学习笔记3
- Spinner(1): 由SDK引发的问题
- 春江赞
- 这些话,或许你听进心里了,就可以改变你的人生!
- Ubuntu安装源配置文件"/etc/apt/sources.list"第X行有错误
- 分布式缓存系统Memcached简介与实践
- Struts2拦截器(Interceptor
- 原型模式(Prototype)
- C++/CLI思辨录之拷贝构造函数
- [Asp.net4.0]在 IIS6 ASP.NET 4.0 安装 最常遇到的四个问题