[CityHunter]点击ListView项目后修改其内容
在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项目后修改其内容相关推荐
- **vue-cli4生成项目后修改默认主页的内容**
vue-cli4生成项目后修改默认主页的内容 原始的默认首页是vue的欢迎界面 接着找到src>views>Home.vue,这个为默认的首页 将其改为 <template>& ...
- 微信小程序创建项目后无法显示内容
我遇见这个问题属于其一,建议多找几种办法 因为我一星期之前为了做其他项目,下载了其他的开发工具 最后把工具卸载掉,重新安装新版的稳定版. 问题完美解决!!! 开始创建项目,项目创建完后, 普通编译和页 ...
- Eclipse项目上传码云、从码云上检出项目、修改检出项目后在提交到码云、看此篇即可
Eclipse中项目上传到码云平台 文章的目的是自己记录学习使用,只记录使用eclipse相应的上次下载修改方法,具体细节没做很大把控.希望对自己学习有所帮助,同时也希望能帮助到没有接触到这块的人一起 ...
- 通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目
通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目 一.前言 1.通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目包括用Kei ...
- Eclipse复制或修改项目后,把项目部署后发现还是原来的项目名称
Eclipse复制或修改项目后,把项目部署后发现还是原来的项目名称 解决: 到项目根目录打开.setting文件夹,找到"org.eclipse.wst.common.component&q ...
- 修改下拉状态栏点击屏幕录制后出现ANR。禁用Hotspot tethering菜单下的 “Wi-Fi hotspot。默认系统语言为英文。
修改下拉状态栏点击屏幕录制后出现ANR: 报错信息为 rocess: com.android.systemui, PID: 5593 // java.lang.NullPointer ...
- IDea项目名修改后,后面有个中括号原来的项目名
目录 一.问题 二.正确修改 一.问题 最近项目正在从Springboot改造成SpringCloud微服务架构,所以会涉及到新增模块的情况, 这里我直接复制了其他项目,需要改正改名字,并且通过修改文 ...
- vue项目打包后修改接口地址
vue项目打包后修改接口地址 我们在做vue项目时,总会遇到开发时用的测试地址和项目上线时用到的接口地址不同,再就是项目上线后,后期需要更改接口地址的情况.然而,如果没有一个配置文件,后期更换起来就只 ...
- java 不重启部署_一篇文章带你搞定SpringBoot不重启项目实现修改静态资源
一.通过配置文件控制静态资源的热部署 在配置文件 application.properties 中添加: #表示从这个默认不触发重启的目录中除去static目录 spring.devtools.res ...
- eclipse中复制导入的项目并且修改了项目名字,项目后面的括号显示原来项目的名字
eclipse中Tomcat导入项目并且修改了项目名字,把项目add到Tomcat上面,发现现在的项目后面带了个括号显示原来项目的名字,并且在访问的时候也只能用原来的项目名访问,怎么办呢? 遇到这个问 ...
最新文章
- 天线开路短路检测原理_变频空调通讯电路原理与元件级维修
- RAID重组和数据库数据的修复与验证
- 【Python】字典(Dictionary) items()方法
- 数据导出到Excel
- The Little Match Girl
- mysql 做回归模型_GitHub - themycode/intelligent-test-platform: intelligent-test-platform
- 用SD卡下载uboot、linux内核和文件系统
- python 开源数据抓取框架scrapy
- java 本地内存_哪个更快:Java堆还是本地内存
- 使用python获取nature系列期刊封面高清图片
- P3239 [HNOI2015]亚瑟王
- windows网络排查
- 灵魂歌手 演唱:梁博
- cmd 下登陆ftp及相关操作
- 从0开始学Unity做SLG系列(GameFramework框架)
- 函数<小罗爱c语言>
- java 线程机制_Java线程机制学习
- MongoDB之文本搜索
- 未来五年 LED智慧透明屏未来3大发展趋势
- 习题:有100个学生种100棵树,其中高中生每人种3棵树,初中生每人种1棵树,小学生每3人种1棵树,问高中生、初中生、小学生各有多少人?