ListView自定义视图中对Button按钮实现仅允许一个按钮处于开启状态
2019独角兽企业重金招聘Python工程师标准>>>
Android项目迭代,之前使用下拉框Spinner被替换成ListView,相应的实现也比之前更加复杂了,根据美工给出的界面进行设计,要实现的效果如下:
根据图示 可知,ListView需要自定义试图,而且视图中有按钮,按钮之间只允许一个为“开启”状态。
通过以上分析,我们大致可以知道实现的思路是:重写适配器,通过布局填充器填充自定义视图。然后针对按钮或ListView的Item实现单击操作。
在实际的编码中,我新建自己的Adapter(继承自BaseAdapter),重写getView()方法,开始针对按钮添加单击事件,这样虽然实现了按钮状态的切换,但是并不能操作兄弟按钮的状态。经过到社区和群里讨论与指导,我发现之前的方向有一定的问题,正确的方向应该是把填充的按钮对象都放到一个集合里,在触动单击事件的时候遍历集合里的元素,改变其状态。
为了达到更好的用户体验,我选择针对ListView的单击事件,这样,用户只有触发ListView里的Item,就可以相应,不用再费力的点击那个小按钮了。此处需要注意的地方是ListView里的子控件Button会屏蔽Listview的单击事件,需要对Button进行处理,阻止单击与获得焦点等功能。可以在xml文件中对其定义:
android:focusable="false"
android:clickable="false"
android:focusableInTouchMode="false"
重写getView()方法的实现:
public View getView(final int position, View convertView, ViewGroup parent) {final int selectID = position;ListItemView listItemView = null;if (convertView == null) {listItemView = new ListItemView();convertView = listContainer.inflate(R.layout.item, null);//获取自定义视图// 获取控件对象listItemView.vpnSwitch = (Button) convertView.findViewById(R.id.btn_server);btnMap.add(listItemView.vpnSwitch);//把Button添加到集合中// 设置控件集到convertViewconvertView.setTag(listItemView);} else {listItemView = (ListItemView) convertView.getTag();}listItemView.vpnSwitch.setText("关");convertView.setClickable(true);convertView.setId(position);convertView.setOnClickListener(myClickListener);//针对ListView Item添加单击事件return convertView;}
ListView单击事件的监听器:
public OnClickListener myClickListener = new OnClickListener() {public void onClick(View v) {int position = v.getId();//遍历并更改按钮状态for (int i=0,n=btnMap.size(); i<n ;i++) {((Button)btnMap.get(i)).setText("关");}//获取ListItemViewListItemView listItemView = (ListItemView) v.getTag();//针对具体空间的其他操作listItemView.vpnSwitch……}
};
回过头来看,实现仅允许一个按钮处于激活状态的原理就是先把ListView自动创建的Button放进集合里,然后对其进行集中管理。我想如果在getView中实现单个按钮的点击事件来影响兄弟按钮的状态也应该是可行的,有兴趣的读者可以动手试一试:)
转载于:https://my.oschina.net/hanzhankang/blog/112008
ListView自定义视图中对Button按钮实现仅允许一个按钮处于开启状态相关推荐
- UITableView cell自定义视图中插入Table实现复杂界面
最近项目中需要实现如下图所示的效果: 通过界面我们断定是一个UITableView,分成三部分,第一部分是全天,第二部分是上午,第三部分是下午.最主要的是AM和PM中也是列表,这个就比较复杂了.我的做 ...
- 如果exclipe中Java视图中Consol跑偏了单独形成一个弹框怎么办?
问题如图: 不和其他的在同一窗体中,而且拖动也拖不进去,则是使用以下方法: 点击工具栏上的Window--->点击Reset Perspective...这样就可以解决了.
- java中的函数指的是,函数式接口在Java中是指有且仅有一个抽象方法的接口。( )...
[判断题]主动红外探测器用于室外警戒时,受环境气候影响较大,易产生误报. [单选题]鸟氨酸循环的限速酶: [判断题]外表酸度又称为发酵酸度,是指牛乳在放置过程中,由乳酸菌作用于乳糖产生乳酸而升高的那部 ...
- 计算机管理服务哪个是打印机的,为什么我的电脑中打印机服务总处于开启状态...
出现这个问题时,首先请依据如下步骤手动启用该服务: 在桌面选中"我的电脑",鼠标右键选择"管理": 在"管理"窗口中,选取"服务和 ...
- Android中自定义视图View
标签: 前言 好长时间没写blog了,心里感觉有点空荡荡的,今天有时间就来写一个关于自定义视图的的blog吧.关于这篇blog,网上已经有很多案例了,其实没什么难度的.但是我们在开发的过程中有时候会用 ...
- Android中自定义视图View之---前奏篇
前言 好长时间没写blog了,心里感觉有点空荡荡的,今天有时间就来写一个关于自定义视图的的blog吧.关于这篇blog,网上已经有很多案例了,其实没什么难度的.但是我们在开发的过程中有时候会用到一些自 ...
- odoo 自定义视图_如何使用Windows的五个模板自定义文件夹视图
odoo 自定义视图 If you're particular about how Windows displays the contents of your folders, you can cut ...
- Android自定义视图四:定制onMeasure强制显示为方形
这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...
- ANDROID自定义视图——onMeasure流程,MeasureSpec详解
简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量--onMeasure():决定View的大小 2.布局--onLayout():决定View在ViewGroup中的位置 3. ...
最新文章
- java用画线写字_用Java画线
- 李德毅院士《探索新一代人工智能产业发展》
- matlab中服从高斯分布的矩阵_一些张量的计算步骤matlab代码
- swagger 动态设置版本号_如何快速玩转swagger
- 全局莫兰指数_空间自相关 | 莫兰指数
- 3.2 神经网络表示
- 关于最新上映电影的评论
- 蓝桥杯 ADV-109 算法提高 征税程序
- lumion制作海上明月5.29
- 给你一个Pull Request的机会
- html5 swipe滑动选择身高,Swipe 移动端滑动插件使用详解
- 阿里云主机免费申请级网站配置
- html中label如何居中,怎么让label标签中的文字居中显示
- Kaggle赛题-Synthetic Financial Datasets For Fraud Detection
- Mac 禁止 GlobalProtect运行
- 量化交易:如何让回测更贴近实盘结果
- 埃森哲互动成为全球最大的数字营销服务商
- 云计算学习7——云计算OpenStack运维基础
- 指尖江湖李忘生鸿蒙初开,剑网3指尖江湖李忘生技能怎么配?李忘生技能搭配攻略...
- Sublime Text 注册码