首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android开发必知--使用View.setId的正确姿势

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

作者头像
codingblock
发布2017-12-29 15:07:06
发布2017-12-29 15:07:06
1.8K00
代码可运行
举报
文章被收录于专栏:CodingBlockCodingBlock
运行总次数:0
代码可运行

  这两天在写一个柱状图的自定义控件,用的直接继承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()解决,不过既然有方案二更好的方法,就不过多赘述此方法了)

代码语言:javascript
代码运行次数:0
运行
复制
my_view.setId(View.generateViewId());

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

代码语言:javascript
代码运行次数:0
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="my_view" type="id" />
</resources>

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

代码语言:javascript
代码运行次数:0
运行
复制
my_view.setId(R.id.my_view);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-12-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档