Spinner
Spinner是一个下拉列表,通常用于选择一系列可选择的列表项,它可以使用适配器,也可以直接设置数组源。
1、直接设置数组源
在res/values/strings.xml中设置数组源
<string-array name="selector">
<item >学生证</item>
<item >结婚证</item>
<item >军官证</item>
<item >党员证</item>
</string-array>
然后在MainActivity找到spinner,然后设置默认选择项
import android.app.Activity;
import android.os.Bundle;
import android.widget.Spinner; public class MainActivity extends Activity {
/**
* Spinner列表选择框
* 是一个下拉列表,通常用于选择一系列可选择的列表项,它可以使用适配器,也可以直接设置数组源
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Spinner spinner = (Spinner) findViewById(R.id.spinner); spinner.setSelection(2, true);//从0开始
} }
这里的setSelection(int position, boolean animate)和setSelection(int position) 实现机制有较大区别,当调用前者时重新layout,立即触发onItemSelected函数,作用相当于用手直接点击。而后者设置了下次选择位置:setNextSelectedPositionInt(position); 然后请求Layout;,而requestLayout并非立即执行,仅仅是一个schedule。但是后者可能在重新装载数据然后Layout时丢失了某些状态。
运行效果如图
2、使用适配器,并设置监听
public class MainActivity extends Activity {
/**
* Spinner列表选择框
* 是一个下拉列表,通常用于选择一系列可选择的列表项,它可以使用适配器,也可以直接设置数组源
*/ //数据源
String[] data = {"妈妈","爸爸","爷爷","奶奶","外公","外婆"}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Spinner spinner = (Spinner) findViewById(R.id.spinner); //直接使用数组源
//spinner.setSelection(2,true); //使用适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, data);
spinner.setAdapter(adapter); //下拉列表选择框,设置监听
spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
//直接数组源
//String name = getResources().getStringArray(R.array.selector)[position];
//Toast.makeText(getBaseContext(), name, Toast.LENGTH_SHORT).show(); //适配器的时候
String name = data[position];
//实质上如果是MainActivity.this也可以,但是如果改成this,会报错。因为这个用了匿名内部类
Toast.makeText(getBaseContext(), name, Toast.LENGTH_SHORT).show();
} @Override
public void onNothingSelected(AdapterView<?> parent) {
//当没有任何选择时调用从没触发过
Log.e("TAG", "从没触发过");
}
});
} }
运行效果如图: