这两天在写一个柱状图的自定义控件,用的直接继承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);

  

Android开发必知--使用View.setId的正确姿势的更多相关文章

  1. 打造高质量Android应用:Android开发必知的50个诀窍

    打造高质量Android应用:Android开发必知的50个诀窍

  2. Android开发必知--自定义Toast提示

    开发过Android的童鞋都会遇到一个问题,就是在打印Toast提示时,如果短时间内触发多个提示,就会造成Toast不停的重复出现,直到被触发的Toast全部显示完为止.这虽然不是什么大毛病,但在用户 ...

  3. Android开发必知--WebView加载html5实现炫酷引导页面

    大多数人都知道,一个APP的引导页面还是挺重要的,不过要想通过原生的Android代码做出一个非常炫酷的引导页相对还是比较复杂的,正巧html5在制作炫酷动画网页方面比较给力,我们不妨先利用html5 ...

  4. Android开发必知--几种不同对话框的实现

    在开发过程中,与用户交互式免不了会用到对话框以实现更好的用户体验,所以掌握几种对话框的实现方法还是非常有必要的.在看具体实例之前先对AlertDialog做一个简单介绍.AlertDialog是功能最 ...

  5. Android 开发者必知的开发资源

    英文原文:Bongzimo  翻译: ImportNew-黄小非 译文链接:http://www.importnew.com/3988.html Android 开发者必知的开发资源 随着Androi ...

  6. .NET程序员项目开发必知必会—Dev环境中的集成测试用例执行时上下文环境检查(实战)

    Microsoft.NET 解决方案,项目开发必知必会. 从这篇文章开始我将分享一系列我认为在实际工作中很有必要的一些.NET项目开发的核心技术点,所以我称为必知必会.尽管这一系列是使用.NET/C# ...

  7. Android开发艺术探索笔记——View(二)

    Android开发艺术探索笔记--View(二) View的事件分发机制 学习资料: 1.Understanding Android Input Touch Events System Framewo ...

  8. Android开发艺术探索笔记—— View(一)

    Android开发艺术探索笔记 --View(一) View的基础知识 什么是View View是Android中所有控件的基类.是一种界面层控件的抽象. View的位置参数 参数名 获取方式 含义 ...

  9. Android开发者必知的开发资源

    推荐书籍 我推荐下面两本书: The Busy Coder’s Guide to Android Development <The Busy Coder’s Guide to Android D ...

随机推荐

  1. Bzoj 2431 HAOI2009 逆序对数列

    Description 对于一个数列{ai},如果有i**<**j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的数列,可以很容易求出有多少个逆序对数. ...

  2. P1832 A+B Problem(再升级)

    P1832 A+B Problem(再升级) 题目提供者 usqwedf 传送门 标签 动态规划 数论(数学相关) 洛谷原创 难度 普及/提高- 通过/提交 107/202 题目背景 ·题目名称是吸引 ...

  3. 263. Ugly Number(C++)

    263. Ugly Number Write a program to check whether a given number is an ugly number. Ugly numbers are ...

  4. ubuntu vim之php函数提示

    参考文献:http://www.feiyan.info/32.html 折腾半天 原来是phpfunclist.txt不正确...... vim的配置在~/.vimrc (既你的home主目录 ,例如 ...

  5. cp 命令参数

    cp命令         该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大.         语法: cp [选项] 源文件或目录 目标文件或目录 ...

  6. Python3 列表

    list是一种有序的集合,可以随时添加和删除其中的元素. >>> classmates = ['Michael', 'Bob', 'Tracy'] >>> clas ...

  7. javascript 返回顶部

    <style> #linGoTopBtn {    POSITION: fixed; TEXT-ALIGN: center; LINE-HEIGHT: 30px; WIDTH: 30px; ...

  8. JSON知多少-JSON数据结构

    最近在开发微信平台,要使用JSON进行数据交换,之前用过JSON,但仅限于…… 在开发微信平台中,要使用JSON形式如下:代码片断1: { "button":[ { "t ...

  9. ul动态增加li

    --> aaa bbb <%@ page language="java" import="java.util.*" pageEncoding=&qu ...

  10. Xcode报错 - 1

    1. xcode在真机调试的时候出现"The identity used to sign the executable is no longer valid" 解析: 是由于.pr ...