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按钮实现仅允许一个按钮处于开启状态相关推荐

  1. UITableView cell自定义视图中插入Table实现复杂界面

    最近项目中需要实现如下图所示的效果: 通过界面我们断定是一个UITableView,分成三部分,第一部分是全天,第二部分是上午,第三部分是下午.最主要的是AM和PM中也是列表,这个就比较复杂了.我的做 ...

  2. 如果exclipe中Java视图中Consol跑偏了单独形成一个弹框怎么办?

    问题如图: 不和其他的在同一窗体中,而且拖动也拖不进去,则是使用以下方法: 点击工具栏上的Window--->点击Reset Perspective...这样就可以解决了.

  3. java中的函数指的是,函数式接口在Java中是指有且仅有一个抽象方法的接口。( )...

    [判断题]主动红外探测器用于室外警戒时,受环境气候影响较大,易产生误报. [单选题]鸟氨酸循环的限速酶: [判断题]外表酸度又称为发酵酸度,是指牛乳在放置过程中,由乳酸菌作用于乳糖产生乳酸而升高的那部 ...

  4. 计算机管理服务哪个是打印机的,为什么我的电脑中打印机服务总处于开启状态...

    出现这个问题时,首先请依据如下步骤手动启用该服务: 在桌面选中"我的电脑",鼠标右键选择"管理": 在"管理"窗口中,选取"服务和 ...

  5. Android中自定义视图View

    标签: 前言 好长时间没写blog了,心里感觉有点空荡荡的,今天有时间就来写一个关于自定义视图的的blog吧.关于这篇blog,网上已经有很多案例了,其实没什么难度的.但是我们在开发的过程中有时候会用 ...

  6. Android中自定义视图View之---前奏篇

    前言 好长时间没写blog了,心里感觉有点空荡荡的,今天有时间就来写一个关于自定义视图的的blog吧.关于这篇blog,网上已经有很多案例了,其实没什么难度的.但是我们在开发的过程中有时候会用到一些自 ...

  7. odoo 自定义视图_如何使用Windows的五个模板自定义文件夹视图

    odoo 自定义视图 If you're particular about how Windows displays the contents of your folders, you can cut ...

  8. Android自定义视图四:定制onMeasure强制显示为方形

    这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...

  9. ANDROID自定义视图——onMeasure流程,MeasureSpec详解

    简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量--onMeasure():决定View的大小 2.布局--onLayout():决定View在ViewGroup中的位置 3. ...

最新文章

  1. java用画线写字_用Java画线
  2. 李德毅院士《探索新一代人工智能产业发展》
  3. matlab中服从高斯分布的矩阵_一些张量的计算步骤matlab代码
  4. swagger 动态设置版本号_如何快速玩转swagger
  5. 全局莫兰指数_空间自相关 | 莫兰指数
  6. 3.2 神经网络表示
  7. 关于最新上映电影的评论
  8. 蓝桥杯 ADV-109 算法提高 征税程序
  9. lumion制作海上明月5.29
  10. 给你一个Pull Request的机会
  11. html5 swipe滑动选择身高,Swipe 移动端滑动插件使用详解
  12. 阿里云主机免费申请级网站配置
  13. html中label如何居中,怎么让label标签中的文字居中显示
  14. Kaggle赛题-Synthetic Financial Datasets For Fraud Detection
  15. Mac 禁止 GlobalProtect运行
  16. 量化交易:如何让回测更贴近实盘结果
  17. 埃森哲互动成为全球最大的数字营销服务商
  18. 云计算学习7——云计算OpenStack运维基础
  19. 指尖江湖李忘生鸿蒙初开,剑网3指尖江湖李忘生技能怎么配?李忘生技能搭配攻略...
  20. Sublime Text 注册码

热门文章

  1. AXI3和AXI4协议详细说明
  2. tiny cc在云服务centos上运行
  3. mysql输入命令1002无标题_Linux下远程连接MySQL数据库的方法
  4. ST_Curve --- 一个专业的曲线绘制控件
  5. python精要(66)—类(3)-文档字符串,注释文档
  6. julia(4)-if ,else
  7. 【Python 】绘制惊艳的桑基图
  8. 创造属于你自己的深度学习框架,就在这2天时间
  9. 【机器学习基础】你应该知道的LightGBM各种操作!
  10. 信息抽取(一)机器阅读理解——样本数据处理与Baseline模型搭建训练(2020语言与智能技术竞赛)