Android Spinner控件 显示数据和下拉选中数据分离
来源:互联网 发布:直销软件 编辑:程序博客网 时间:2024/06/05 02:49
项目即将快完工了,还有两个关键的部分,心情还是很激动的,经过两个月的从零开始,学到的都已经记录在博客里了,主要涉及的是fragment还有一些乱码解决、 适配器的实际的解决方案,博客地址为:http://blog.csdn.net/nihaoqiulinhe。
上个礼拜一直纠结于一个问题就是:下拉的spinner数据,点击之后如何能动态的修改显示的数据。需求具体是这样的:有一个有效期限,有以下几种:1小时、2小时、4小时、8小时等,当用户点击下拉列表1小时之后,显示的是当前时间加上1小时的时间。
解决方案如下:
spinner都有监听方法,当点击了某一个下拉列表项之后,就会识别当前的位置、以及显示框的view,这时候只需要得到下拉的是哪个选项,然后给view重新设置数据,使用switch语句来区分点击的是哪个,就可以动态的修改填充数据,代码如下:
// **********第2个下拉列表,有效日期************spinner = (Spinner) view.findViewById(R.id.effectivedate);// 将可选内容与ArrayAdapter连接起来adapter = new ArrayAdapter<String>(getActivity(),R.layout.activity_tipsprice_spinner, m);// //设置下拉列表的风格adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);// 将adapter 添加到spinner中spinner.setAdapter(adapter);// 添加事件Spinner事件监听spinner.setOnItemSelectedListener(new effectivedateSpinnerSelectedListener());spinner.setSelection(0, false);// 设置默认值spinner.setVisibility(View.VISIBLE);}// 使用数组形式操作class effectivedateSpinnerSelectedListener implementsOnItemSelectedListener {@Overridepublic void onItemSelected(AdapterView<?> arg0, =View arg1=,//这两个分别代表着显示的spinner,选择的位置long arg3) {switch (arg2) {case 0:if (flagOne == 0) {//这里标志位是为了实现,第一次进入的时候默认显示为1小时break;} else {String oneHour = chooseDate(1);((TextView) arg1).setText(oneHour);flagOne = 1;break;}case 1:String twoHour = chooseDate(2);((TextView) arg1).setText(twoHour);break;case 2:String fourHour = chooseDate(4);((TextView) arg1).setText(fourHour);break;case 3:String eightHour = chooseDate(8);((TextView) arg1).setText(eightHour);break;case 4:String twelveHour = chooseDate(12);((TextView) arg1).setText(twelveHour);break;case 5:String SixTeeHour = chooseDate(16);((TextView) arg1).setText(SixTeeHour);break;default:break;}Toast tst = Toast.makeText(getView().getContext(), "您点击了" + m[arg2]+ "第" + arg2 + "项", Toast.LENGTH_SHORT);tst.show();}private String chooseDate(int hours) {//对时间进行增加SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Calendar ca = Calendar.getInstance();ca.setTime(new Date());ca.add(Calendar.HOUR_OF_DAY, hours);String str = sdf.format(ca.getTime());return str;}@Overridepublic void onNothingSelected(AdapterView<?> arg0) {}}这样的问题,我在网上搜了很多次,都没有人给出很清晰的解答,所以就斗胆记录下来,这种方式可以很好的解决选择与显示分离的功能,有更好的办法的前辈,不吝赐教。关于spinner的基础的具体用法,可以参考http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0105/2264.html这篇博文。
我总结一下,这个监听函数,提供的几个参数是解决这个问题的关键,初始的时候下拉列表的数据都是静态的,选择某个数据之后,利用位置和view来进行动态的修改,完成目标。
还有另外需求,如果spinner刚开始进去的时候不显示任何数据,下面是另一位前辈提供的方案,其实原理跟我上面差不多,就是利用view。
转自:http://het.im/post/android-spinner-no-select-default.html
android Spinner默认不选中项目开发中经常有些变态的需求,比如要求spinner默认不选中任何一项。
如果你自定义spinner,那这个当然不是问题;也可以在原有的选项列表中开头增加一项空字符串项,默认显示这个空字符串也达到了效果,不过采用这种方式需要你在获取被选择项的位置时忽略空字符串项。
经过一番摸索,发现我们只要保证 spinner第一次展示时不显示即可,相关代码如下:
boolean isSpinnerFirst = true ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main) ; Spinner spinner = (Spinner)findViewById(R.id.spinner) ; spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { if (isSpinnerFirst) { //第一次初始化spinner时,不显示默认被选择的第一项即可 view.setVisibility(View.INVISIBLE) ; } isSpinnerFirst = false ; } @Override public void onNothingSelected(AdapterView<?> parent) { } }) ; }
- Android Spinner控件 显示数据和下拉选中数据分离
- Android之Spinner选中列表数据不显示数据问题
- 从Spinner下拉框中获取选中的数据
- Android 下拉控件:Spinner
- Spinner控件显示下拉列表
- Android中Spinner下拉列表(使用自定义Adapter实现,显示数据取自联系人数据库)
- Android---Spinner的使用01(选择下拉框Toast显示选择的数据)
- android--Spinner(菜单下拉控件)
- Android 下拉列表Spinner控件
- android 控件 下拉列表(Spinner)
- Android下拉菜单Spinner控件
- android----Spinner下拉列表控件
- android 使用drawable将显示状态和数据分离
- Android-Spinner下拉列表显示
- android 标题栏下拉选择控件(下拉菜单宽度全屏显示spinner)
- Android学习--动态向SPinner控件中添加数据
- Android Studio中Spinner控件的数据绑定实现
- Android下拉框控件Spinner的使用
- poj 2778 DNA Sequence (ac自动机+矩阵快速幂优化dp)
- QUARTUS ii中IP核破解
- 绩效管理
- Quartz参数说明
- Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.
- Android Spinner控件 显示数据和下拉选中数据分离
- 从零开始学习嵌入式 - 什么是Endianness?
- C++中的多态性
- domino百度文库功能
- 如何搭建SSH+JPA+mysql项目
- 交换、路由与防火墙手记(3)
- 【转】Android之apk文件签名——keytool 和 jarsigner
- C++11 CPP11 学习
- Java之extends implements