这种做法符合一般的规范么?
按照我的理解,view的id和tag都是用来作为“指向view”的。问题1:view的id和tag我有没有理解错呢?还可以怎么来理解这两个东西设计出来的意图呢?
但是之前review别人的代码,发现有的人通过id做了一些文章。直接给view的id设置了一个int值(通常我们只直接在xml里面通过@xxx自动生成的id)。这样做,就可以利用int的一些特性来处理这个了。比如遍历什么的。那段代码也写得比较巧妙。
今天在写一段代码的时候,碰到一些问题。代码情景时这样的:
1、一个列表listview,每个item里面有一个按钮。点击按钮以后,获取到adapter里面的data做一些处理。比如,根据点击的model获取到it。
2、在adapter的getView中给button设置onclick()。在onclick中获取当前position。
3、碰到问题了,onclick中的代码,只有在发生这个事件的时候才会执行,所以直接写这段代码的时候会报错:
getView(View v, int position){ // inflater... button.setOnclickListener(View v){ syserr.(getItem(position)); // 这里会报错,大致意思是这里不可以设置non-statis值。比较好理解。 } }
getView(View v, final int position){ // 这里设置final // inflater... button.setOnclickListener(View v){ syserr.(getItem(position)); // work } }
getView(View v, int position){ // inflater... final i = position; // 这里设置final button.setOnclickListener(View v){ syserr.(getItem(i)); // work } }
这种方式是可以工作的,因为position是int的,在某些情景下,传递到内部事件监听中的参数,是Object的,就会碰到很多麻烦了。所以我在想,可不可以用tag来传值?tag基本上可以传任何东西。
通过tag传值,一般情况下你们会这样做么?这么做有什么风险没有?这个tag到底是来干嘛的。。。
你这个理解有问题,View的ID一般是用来寻找View的,正常情况下就是在XML里定义,不要在程序里修改,不然有可能跟XML自动生成的ID重叠。
而Tag的作用是帮助数据和View进行绑定的,比如点击一个按钮,可以通过其绑定的Tag直接获得文章的相关属性(包括ID,内容等,如果有多个数据,可以定义一个类来承载)。
ID和TAG的作用是有很大差别的,ID是帮助程序中寻找到VIEW,所有不要修改,不然有可能就找不到VIEW了。而TAG是帮助VIEW绑定数据,这样就能通过VIEW的事件快速连接到对应的数据源。
按照我的理解,xml自动生成,基本上不可能出现id为1,2,3,4这种情况。所以,冲突的可能性存在,但是几乎不可能。只要不使用过多。tag看来我理解的没错3qu~版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。