Android开发必知--使用View.setId的正确姿势

  这两天在写一个柱状图的自定义控件,用的直接继承ViewGroup的方式实现的,我们都知道,这是自定义控件里面最简单的一种了,有时间写个总结分享一下。这里我想说的重点是,在写这个自定义控件的时候遇到了个关于View.setId()小问题,在网上查了好多,有很多回答真是纯属扯淡,最后终于在stackoverflow上找到了零零碎碎的解决方案,stackoverflow真是一个好地方,几乎所有的问题都可以在上面找到解决方案。在此对这个问题整理记录下来,以便参考。

  其实这个问题也应该是一个开发者必须提前知道的问题,因为我们在开发中,难免需要在代码中动态的添加View并且为其设置id,这种情况下,我们怎么避免与现有的控件id重复呢?试验后发现,将一个int类型的数直接作为setId()的参数在AndroidStudio里面会报错的,说警告可能更合适些,因为可以运行,而在eclipse中这样用不会提示错误,也没有警告。但别管报错与否,这样是不安全的,存在着控件中id冲突的隐患。

  如图:

  eclipse下没有报错,也无警告。

  AndroidStudio下报错。

  重新整理一下问题描述:在AndroidStudio中,用代码动态添加控件时,通过View.setId(int id)为控件添加id时直接赋值一个int类型的参数会“报错”,下面就说说View.setId()的正确使用姿势。

  ·方案一:通过调用View.generateViewId()作为setId的参数,但此方案不是最佳方案,因为View.generateViewId()方法必须为SDK版本17及以上才行,否则报错。(但也有可以通过自写一个Utils.generateViewId()解决,不过既然有方案二更好的方法,就不过多赘述此方法了)

my_view.setId(View.generateViewId());

  ·方案二:在res/values/下添加ids.xml(名字可随意)文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="my_view" type="id" />
</resources>

   然后在代码中做如下设置即可:

my_view.setId(R.id.my_view);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员的诗和远方

Windows安装Python图像处理库:PIL模块

平常一般都在Linux下用Python,今天女票突然说让帮忙把一些图片全部弄成一个分辨率的,作为程序员,这种重复的工作还是交给计算机吧。 到PIL官网下载一个,...

37910
来自专栏www.96php.cn

WeiPHP插件模板中快速引入公共模板文件

WeiPHP插件模板中快速引入公共模板文件,weiphp建立于onethink之上,简单修改代码,无需填写绝对路径实现轻松引入模板。记录一下,分享给需要的人。 ...

2303
来自专栏木头编程 - moTzxx

PHP 获取网络图片资源并保存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

621
来自专栏Youngxj

emlog后台账号密码爆破工具

1852
来自专栏Petrichor的专栏

pycharm: 调用自定义库 报"Unresolved reference"

有时候当我们调用自定义的库时,会发生报”Unresolved reference”警告:

872
来自专栏前端黑板报

Terminal &zsh &oh-my-zsh配置

1.查看shell cat /etc/shells ? 2.更换shell chsh -s /usr/local/bin/zsh 注:要确保更改的shell在上...

2007
来自专栏小白鼠

Ionic3 拍照上传

本文主要介绍使用cordova实现拍照上传,走通 “拍照 》预览 》上传 》 下载 ”这个流程。为了方便查看测试结果,需要了解Ionic应用调试的基本方法,有关...

773
来自专栏凉城

EMLOG给主题添加复制粘贴弹窗代码

1795
来自专栏王二麻子IT技术交流园地

《跟我学IDEA》三、实用配置(行号、提示、代码等)

上一篇博文我们介绍了idea如何配置一个maven,git,tomcat等,这一篇我们来进行一些常用设置,这些也正是idea可爱之处,大大提高了开发的效率。 第...

1885
来自专栏源码之家

还是分表了

1545

扫码关注云+社区