java将属性练成字符串,Java中通过属性字符串名取属性内容
在Android开发当中资源的获取其实是间接通过R文件进行的,这个R文件就相当于是一个地址列表,存放着每个资源的地址
那么如何快速高效的获取就是这篇文章要分析的问题
假设我们有一个图片资源叫btn_bg
那么将一个按钮背景设置为这个图片的方式就是
btn.setBackgroundResource(R.drawable.btn_bg);
这里的R.drawable.btn_bg就是获取图片
但问题来了,这个获取图片的方式是通过对象名获取的,获取一两个可以这么处理
那么如果是多个图片要设置到多个按钮的话
例如按钮的id分别是btn_0,btn_1,btn_2,btn_3,btn_4
图片是btn_bg_0,btn_bg_1,btn_bg_2,btn_bg_4,btn_bg_4
很容易可以想到就是把按钮和图片都弄成List,然后循环
但是问题又来了,这个按钮要弄成List,就得每一个都findViewById
首先要声明两个List
List btns = new ArrayList(){ {
add((Button) findViewById(R.id.btn_0));
add((Button) findViewById(R.id.btn_1));
add((Button) findViewById(R.id.btn_2));
add((Button) findViewById(R.id.btn_3));
add((Button) findViewById(R.id.btn_4));
}};
List btn_bgs = new ArrayList(){ {
add(R.drawable.btn_bg_0);
add(R.drawable.btn_bg_1);
add(R.drawable.btn_bg_2);
add(R.drawable.btn_bg_3);
add(R.drawable.btn_bg_4);
}};
然后用的时候这样用
for (int i = 0; i < 5; i ++) btns.get(i).setBackgroundResource(btn_bgs.get(i));
看似已经很方便了,可是这里只有5个而且还是固定的内容,如果是数量一多的话,再内容如果是变化的,不是事先确定好的那该如何实现
看到这里可能有人会想了,这里的R.id.和R.drawable.是固定的,如果能否用字符串的"R.id.btn_0"去获取静态对象的R.id.btn_0,那可玩性就高多了
所以本文章的重点就在于如何用String去获取Object
看我写法
List btns = new ArrayList(){ {
try {
for (int i = 0; i < 5; i ++)
add((Button) findViewById((int) R.id.class.getDeclaredField("btn_" + i).get(R.id.class)));
} catch (Exception e) {
// TODO: handle exception
Log.i("MainActivity", e.toString());
}
}};
List btn_bgs = new ArrayList(){ {
try {
for (int i = 0; i < 5; i ++)
add((int) R.drawable.class.getDeclaredField("btn_bg_" + i).get(R.drawable.class));
} catch (Exception e) {
// TODO: handle exception
Log.i("MainActivity", e.toString());
}
}};
使用上还是一样,就是声明的时候变化了,注意这里用了一句关键代码
(int) R.id.class.getDeclaredField("btn_" + i).get(R.id.class))
在使用这句话的时候需要加入异常, 因为用String变量去找对象的属性有可能会出现找不到的情况,只要发现报错信息是java.lang.NoSuchFieldException: xxx一看就知道是找不到名为xxx的属性
那这句关键代码该如何灵活变换呢,其实很简单,这里出现两次的R.id.class,根据你要获取的对象换成对应的类即可
再一个就是getDeclaredField方法里面的内容,这里面的内容位String类型,上面的例子是有规律的01234,所以很容易循环出来
有人会问了,如果是不规律的情况怎么办,如果不规律的话那就直接用一个String[]数组把变量放进去,然后循环,以后如果有变化只要改变数组即可,一劳永逸
也可以把这里面的内容通过参数传进来,传什么进来他就可以获取什么,只要能获取得到的话,这里可发挥的空间就很大了,对应的最前面要加上强制类型转换
整个思路大概就这样,主要一个思想就是只要是通过字符串去获取属性的情况都可以采用这个方法获取.
java将属性练成字符串,Java中通过属性字符串名取属性内容相关推荐
- 使用C#删除一个字符串数组中的空字符串
C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...
- 题目十:从字符串2中找出字符串1中的所有字符并按ASCII排序
给定两个字符串 从字符串2中找出字符串1中的所有字符 去重并按照ASCII码值从小到大排列 输入字符串1长度不超过1024 字符串2长度不超过100 字符范围满足ASCII编码要求,按照ASCII由小 ...
- Java中用三种方法输出字符串_java中两个字符串连接的三种方法
java中两个字符串连接有以下三种方法: 第一种方法:使用+: 第二种方法:使用concat(): 第三种方法:使用append(): 如下代码: public class Practice { // ...
- java如何使截取字符串_java中如何截取字符串中的指定一部分
java中如何截取字符串中的指定一部分 关注:136 答案:4 mip版 解决时间 2021-02-06 13:27 提问者妳涐執唸汰深 2021-02-06 08:56 精选 比如 F:\wor ...
- java英文字母排序_Java编程实现中英混合字符串数组按首字母排序的方法
在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序.例如: 输出的结果为:"gyu sdf zf 大同 的人 地方 反对 ...
- java中英文混合排序_Java编程实现中英混合字符串数组按首字母排序的方法
本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法.分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷 ...
- java split函数的用法,java拆分字符串_java中split拆分字符串函数用法
摘要 腾兴网为您分享:java中split拆分字符串函数用法,中信期货,掌上电力,星球联盟,淘集集等软件知识,以及韩剧精灵,每日英语听力vip,龙卷风收音机,优衣库,中国平煤神马集团协同办公系统,光晕 ...
- java list 去空字符串_从字符串列表中删除空字符串
我想从python中的字符串列表中删除所有空字符串. 我的想法如下: while '' in str_list: str_list.remove('') 有没有更多的Python方式可以做到这一点? ...
- 把数字翻译成字符串python_python中如何将字符串强制转为数字
python中强制将字符串转换为数字的方法: 1.python中可以使用int()函数将字符串转换为整型数字,int() 函数用于将一个字符串或数字转换为整型. int() 方法的语法:class i ...
- json c语言 数组转字符串数组中,json和字符串/数组/集合的互相转换の神操作总结...
一:前端字符串转JSON的4种方式 1,eval方式解析,恐怕这是最早的解析方式了. function strToJson(str){ var json = eval('(' + str + ')') ...
最新文章
- 第三百二十七天 how can I 坚持
- [置顶]信息发布系统 Jquery+MVC架构开发(7) Controller层
- OpenCL memory object 之 Global memory (1)
- C++ 引用本质就是一个指针常量
- HDOJ1028-Ignatius and the Princess III(整数划分)
- asp.net mysql helper_asp.net使用SQLHelper操作数据库
- c语言速算24源代码,C语言源程序代码-速算24
- 数字图像处理(极简) 第一章 概述(docx)
- 滤波器带宽,信号带宽 和晶振PPM(误差)的关系
- Elasticsearch创建索引别名
- MySQL学习笔记——多表查询
- 国务院办公厅关于2017年 部分节假日安排的通知 (zz)
- python获取所有a股股票代码_股票量化分析(一)获取A股列表
- 指纹特征提取及描述(附Python代码)
- python hasattr() getattr() setattr()函数的使用
- 《孩子,为你自己读书》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+多多图书馆+志存当高远+读万卷书如行万里路+术业有专攻+读书是对思想的一种升华+立钻哥哥++==)
- 计算天数(Python实现)
- 2023年阿里云服务器优惠价格表(ECS、轻量、六代、七代云服务器)
- Windows/Windows下堪称神器的软件集合
- 是否将信息存储在云?
热门文章
- Python3自带HTTP文件传输服务(局域网文件共享)
- java 任意代码执行漏洞_php-fpm在nginx特定环境下的任意代码执行漏洞(CVE-2019-11043)...
- eps倾斜摄影矢量化采集毕业设计_eps倾斜摄影矢量化dlg采集
- 根据端口不同来切换站点_根据不同高温气体对窑炉的侵蚀,来选用相应的耐火材料...
- 有向加权图 最大弱连通分支_开盘引来大涨,当下股市最大的风险是它?
- java 接口文件夹_Java NIO.2 使用Path接口来监听文件、文件夹变化
- mysql 复制方式_MySQL复制方法
- 相关系数矩阵计算_corrplot包:相关性矩阵可视化
- QQ邮箱怎么发送文件夹 怎样在QQ邮箱里发送压缩文件夹
- 电脑公司win11 64位旗舰版镜像文件v2021.07