zoukankan      html  css  js  c++  java
  • 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);
    

       

  • 相关阅读:
    IOS 获取时间的问题
    JQ 点赞
    截取字符串第一个空格前的字符
    JQ 的一些方法
    匿名函数var a =function(){}和function a(){}的区别
    完美支持中文编程的 Emacs 配置文件 .emacs
    linux find 命令忽略某个或多个子目录的方法
    Linux下如何用date设置时间
    nagios的监控代码!
    shell脚本监控apache进程数和oracle连接数
  • 原文地址:https://www.cnblogs.com/codingblock/p/5090441.html
Copyright © 2011-2022 走看看