满城风絮 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中望列表中动态添加数据。