在MapEdit页面的设计当中,为了让用户知道自己当前选择的设施是什么,要对ListView子项目做一个选中就变更背景的一个效果。如下图:


界面中可以看到,点击图标后,会出现一个橙色的高亮边框。事实上,这是通过改变底图背景而达到的效果。

首先声明,此方法并非我原创,也是从很多地方学来的,具体地址当时忘记存了,现在也找不到了,但还是要感谢一下原作者。

首先要在Drawable文件夹下,新建一个子项的底图背景,我把它取名叫:bg_normal.xml,作为正常情况下地底图背景


<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><!-- 设置边框的大小和颜色 --><stroke
        android:width="2dp"android:color="@color/black" /><!-- 设置图形内的颜色,此处为透明色 --><solid android:color="@android:color/transparent" /><!-- 定义圆角弧度 圆的话就是半径 --><!--<corners android:radius="0dp"/>--><corners
        android:bottomLeftRadius="5dp"android:bottomRightRadius="5dp"android:topLeftRadius="5dp"android:topRightRadius="5dp" /><padding
        android:bottom="0dp"android:left="0dp"android:right="0dp"android:top="0dp" />
</shape>

然后再建一个用于点击后的背景效果,取名为:bg_pressed.xml


<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><!-- 设置边框的大小和颜色 --><stroke
        android:width="2dp"android:color="@color/orange" /><!-- 设置图形内的颜色,此处为透明色 --><solid android:color="@android:color/transparent" /><!-- 定义圆角弧度 圆的话就是半径 --><!--<corners android:radius="0dp"/>--><corners
        android:bottomLeftRadius="5dp"android:bottomRightRadius="5dp"android:topLeftRadius="5dp"android:topRightRadius="5dp" /><padding
        android:bottom="0dp"android:left="0dp"android:right="0dp"android:top="0dp" /></shape>

可以发现,两个背景就颜色不同罢了。关键的来了,需要再新建一个selector.xml,这个文件就像一个容器,把两个背景装到一起,到时候设置到需要设置的地方(我们都知道,布局文件中,是不允许同一个元素设置两个不同背景的。)


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/skill_image_bg_normal" android:state_activated="false"/><item android:drawable="@drawable/skill_image_bg_pressed" android:state_pressed="true"/><item android:drawable="@drawable/skill_image_bg_pressed" android:state_activated="true"/></selector>

最后呢,再把这个文件作为背景,设置到你要塞到ListView(不是ListView所在的布局文件,而是你想要塞到ListView里做内容的自定义的那个布局。)里的那个布局元素,作为背景。如下图:

当然啦,这样肯定还不够的,还必须在代码中做一点设置,在项目的onItemClick事件中,需要加入如下代码:


    /*** 技能点击事件** @param parent* @param view* @param position* @param id*/@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {skillListView.setItemChecked(position, true);}

以上方法需要实现OnItemClickListener接口,这段我就不介绍了,可以自己去查看其他资料。然后呢,我们还要实现一个需求,就是修改里面道具的所剩个数,这个比较麻烦,需要在代码中做一些手脚。

/*** 获取选中的Skill对象** @param selectedItem* @return*/private Skill getSelectedSkill(int selectedItem) {Skill skill = skillAdapter.getItem(selectedItem);return skill;}/*** 更新列表中的数据** @param skill*/private void updateList(Skill skill) {int currentNum = skill.getNum();if (currentNum == 0) {ToastUtil.show("此设施已经用光了!");} else {skill.setNum(currentNum - 1);skillAdapter.notifyDataSetChanged();}}

做一个简单解释,首先呢,我们要用ListView一定会有的一个适配器,我代码中的适配器就是skillAdapt,用这个适配器,获取到之前初始化装填入适配器的对象,当然啦,得根据一个selectedItem标记来获取指定的对象,这个selectedItem就是前面onItemClick方法里地position参数,那取到对应的对象了,只需要修改对象的参数就可以了,这个就比较简单了吧,第二个方法中最后一行代码的意思,可以理解为更新ListView中的内容,相当于刷新操作,本身就是Adapter这个类的一个方法。第二个方法中的针对Num的操作,直接影响的就是第一张截图中,道具的数量。


以上效果的实现,就是点击子项后,子项呈现橙色,然后再在需要地方调用updateList()方法,更新子项的内容(本例中的数量)。

[CityHunter]点击ListView项目后修改其内容相关推荐

  1. **vue-cli4生成项目后修改默认主页的内容**

    vue-cli4生成项目后修改默认主页的内容 原始的默认首页是vue的欢迎界面 接着找到src>views>Home.vue,这个为默认的首页 将其改为 <template>& ...

  2. 微信小程序创建项目后无法显示内容

    我遇见这个问题属于其一,建议多找几种办法 因为我一星期之前为了做其他项目,下载了其他的开发工具 最后把工具卸载掉,重新安装新版的稳定版. 问题完美解决!!! 开始创建项目,项目创建完后, 普通编译和页 ...

  3. Eclipse项目上传码云、从码云上检出项目、修改检出项目后在提交到码云、看此篇即可

    Eclipse中项目上传到码云平台 文章的目的是自己记录学习使用,只记录使用eclipse相应的上次下载修改方法,具体细节没做很大把控.希望对自己学习有所帮助,同时也希望能帮助到没有接触到这块的人一起 ...

  4. 通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目

    通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目 一.前言 1.通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目包括用Kei ...

  5. Eclipse复制或修改项目后,把项目部署后发现还是原来的项目名称

    Eclipse复制或修改项目后,把项目部署后发现还是原来的项目名称 解决: 到项目根目录打开.setting文件夹,找到"org.eclipse.wst.common.component&q ...

  6. 修改下拉状态栏点击屏幕录制后出现ANR。禁用Hotspot tethering菜单下的 “Wi-Fi hotspot。默认系统语言为英文。

    修改下拉状态栏点击屏幕录制后出现ANR: 报错信息为 rocess: com.android.systemui, PID: 5593 //          java.lang.NullPointer ...

  7. IDea项目名修改后,后面有个中括号原来的项目名

    目录 一.问题 二.正确修改 一.问题 最近项目正在从Springboot改造成SpringCloud微服务架构,所以会涉及到新增模块的情况, 这里我直接复制了其他项目,需要改正改名字,并且通过修改文 ...

  8. vue项目打包后修改接口地址

    vue项目打包后修改接口地址 我们在做vue项目时,总会遇到开发时用的测试地址和项目上线时用到的接口地址不同,再就是项目上线后,后期需要更改接口地址的情况.然而,如果没有一个配置文件,后期更换起来就只 ...

  9. java 不重启部署_一篇文章带你搞定SpringBoot不重启项目实现修改静态资源

    一.通过配置文件控制静态资源的热部署 在配置文件 application.properties 中添加: #表示从这个默认不触发重启的目录中除去static目录 spring.devtools.res ...

  10. eclipse中复制导入的项目并且修改了项目名字,项目后面的括号显示原来项目的名字

    eclipse中Tomcat导入项目并且修改了项目名字,把项目add到Tomcat上面,发现现在的项目后面带了个括号显示原来项目的名字,并且在访问的时候也只能用原来的项目名访问,怎么办呢? 遇到这个问 ...

最新文章

  1. 天线开路短路检测原理_变频空调通讯电路原理与元件级维修
  2. RAID重组和数据库数据的修复与验证
  3. 【Python】字典(Dictionary) items()方法
  4. 数据导出到Excel
  5. The Little Match Girl
  6. mysql 做回归模型_GitHub - themycode/intelligent-test-platform: intelligent-test-platform
  7. 用SD卡下载uboot、linux内核和文件系统
  8. python 开源数据抓取框架scrapy
  9. java 本地内存_哪个更快:Java堆还是本地内存
  10. 使用python获取nature系列期刊封面高清图片
  11. P3239 [HNOI2015]亚瑟王
  12. windows网络排查
  13. 灵魂歌手 演唱:梁博
  14. cmd 下登陆ftp及相关操作
  15. 从0开始学Unity做SLG系列(GameFramework框架)
  16. 函数<小罗爱c语言>
  17. java 线程机制_Java线程机制学习
  18. MongoDB之文本搜索
  19. 未来五年 LED智慧透明屏未来3大发展趋势
  20. 习题:有100个学生种100棵树,其中高中生每人种3棵树,初中生每人种1棵树,小学生每3人种1棵树,问高中生、初中生、小学生各有多少人?

热门文章

  1. OPENCV LOMO效果
  2. BUU Dest0g3 520迎新赛 WEB writeup
  3. 聊聊故事点背后的故事
  4. 忆我的大学老师----(一)
  5. 计算机大学老师简介,南开大学计算机学院导师教师师资介绍简介-李敏
  6. 大学教师晋升正教授职称需要多久
  7. C# HttpClientHelper
  8. 后端知识点:互联网中B端客户和C端客户的区别
  9. 360全景倒车影像怎么看_最近淘了一个360度全景倒车影像-4路行车记录仪监控录像,和大家分享一下...
  10. MySQL Java的JDBC编程