休言女子非英物,夜夜龙泉壁上鸣。这篇文章主要讲述Android Spinner列表选择框相关的知识,希望能为你提供帮助。
Spinner
【Android Spinner列表选择框】Spinner是一个下拉列表,通常用于选择一系列可选择的列表项,它可以使用适配器,也可以直接设置数组源。
1、直接设置数组源
在res/values/strings.xml中设置数组源
1 < string-array name="selector"> 2< item > 学生证< /item> 3< item > 结婚证< /item> 4< item > 军官证< /item> 5< item > 党员证< /item> 6< /string-array>
然后在MainActivity找到spinner,然后设置默认选择项
1 import android.app.Activity; 2 import android.os.Bundle; 3 import android.widget.Spinner; 4 5 public class MainActivity extends Activity { 6/** 7* Spinner列表选择框 8* 是一个下拉列表,通常用于选择一系列可选择的列表项,它可以使用适配器,也可以直接设置数组源 9*/ 10@Override 11protected void onCreate(Bundle savedInstanceState) { 12super.onCreate(savedInstanceState); 13setContentView(R.layout.activity_main); 14 15Spinner spinner = (Spinner) findViewById(R.id.spinner); 16 17spinner.setSelection(2, true); //从0开始 18} 19 20 21 }
这里的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 = https://www.songbingjia.com/android/{"妈妈","爸爸","爷爷","奶奶","外公","外婆"}; @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", "从没触发过"); } }); }}
运行效果如图:
文章图片
推荐阅读
- android 通过adb 和 ndk调试堆栈
- Android 手机卫士--获取联系人信息并显示与回显
- Android开发学习之路-LeakCanary使用
- 如何在android中运行C语言程序
- Android TV开发总结构建一个TV app前要知道的事儿
- Android开发有用的三方网站
- Android Studio 引入Lambda表达式
- Android之自定义控件-下拉刷新
- 用密钥安装office2010_其它办公