在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中通过属性字符串名取属性内容相关推荐

  1. 使用C#删除一个字符串数组中的空字符串

    C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...

  2. 题目十:从字符串2中找出字符串1中的所有字符并按ASCII排序

    给定两个字符串 从字符串2中找出字符串1中的所有字符 去重并按照ASCII码值从小到大排列 输入字符串1长度不超过1024 字符串2长度不超过100 字符范围满足ASCII编码要求,按照ASCII由小 ...

  3. Java中用三种方法输出字符串_java中两个字符串连接的三种方法

    java中两个字符串连接有以下三种方法: 第一种方法:使用+: 第二种方法:使用concat(): 第三种方法:使用append(): 如下代码: public class Practice { // ...

  4. java如何使截取字符串_java中如何截取字符串中的指定一部分

    java中如何截取字符串中的指定一部分 关注:136  答案:4  mip版 解决时间 2021-02-06 13:27 提问者妳涐執唸汰深 2021-02-06 08:56 精选 比如 F:\wor ...

  5. java英文字母排序_Java编程实现中英混合字符串数组按首字母排序的方法

    在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序.例如: 输出的结果为:"gyu  sdf  zf  大同  的人  地方  反对 ...

  6. java中英文混合排序_Java编程实现中英混合字符串数组按首字母排序的方法

    本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法.分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷 ...

  7. java split函数的用法,java拆分字符串_java中split拆分字符串函数用法

    摘要 腾兴网为您分享:java中split拆分字符串函数用法,中信期货,掌上电力,星球联盟,淘集集等软件知识,以及韩剧精灵,每日英语听力vip,龙卷风收音机,优衣库,中国平煤神马集团协同办公系统,光晕 ...

  8. java list 去空字符串_从字符串列表中删除空字符串

    我想从python中的字符串列表中删除所有空字符串. 我的想法如下: while '' in str_list: str_list.remove('') 有没有更多的Python方式可以做到这一点? ...

  9. 把数字翻译成字符串python_python中如何将字符串强制转为数字

    python中强制将字符串转换为数字的方法: 1.python中可以使用int()函数将字符串转换为整型数字,int() 函数用于将一个字符串或数字转换为整型. int() 方法的语法:class i ...

  10. json c语言 数组转字符串数组中,json和字符串/数组/集合的互相转换の神操作总结...

    一:前端字符串转JSON的4种方式 1,eval方式解析,恐怕这是最早的解析方式了. function strToJson(str){ var json = eval('(' + str + ')') ...

最新文章

  1. 拓展欧几里得小结(初级理解)
  2. Android SVG 和 VectorDrawable 的基本知识
  3. Zabbix 添加WEB监控(学习笔记十一)
  4. Linux下.o,.so,.a,.la文件
  5. 【区块链】区块链是什么?
  6. 【Qt教程】2.2 - Qt5 布局管理器(水平、垂直、栅格布局)、弹簧、设计一个登陆界面
  7. 华为视频会议系统常见问题及解决方法
  8. 视图,触发器,事务,存储过程,函数与流程控制,索引
  9. 实习日志_护理实习日志
  10. Centos7 安装zmap
  11. 新网漫时代下的国漫“哥伦布”征程
  12. Axure 基础控件(1-49)
  13. Securing Android: A Survey, Taxonomy, and Challenges --论文笔记
  14. AutoCAD坐标与图像坐标
  15. 求一个3*3矩阵对角线元素之和
  16. 解决scipy>1.3版本中没有imresize的问题
  17. 自制合成孔径雷达(7) 声卡实现测速声呐
  18. csdn查看自己收藏的文章
  19. 2017衢州联赛第四题题解
  20. 电子科大自考c语言试题,220名北京考生赶考国科大 面试题目无刚性答案

热门文章

  1. 第十章数据库恢复技术
  2. 部分排序算法c语言实现
  3. 反编译Android APK详细操作指南
  4. EntityFramework进阶——Entity Splitting和Table Splitting
  5. 对可重入锁和不可重入锁的理解
  6. grade java_Gradle Java 构建入门
  7. vue中src文件夹下各文件_Win10下与虚拟机中的linux共享文件夹
  8. 小样本点云深度学习库_论文 | 小样本学习综述
  9. AVR单片机计算器C语言源程序,一个基于AVR单片机的计算器程序.doc
  10. sqoop mysql parquet_Sqoop抽取Hive Parquet表数据到MySQL异常分析