开发者社区> 问答> 正文

Android:通过view的tag传递数据,有没有哪里不好的地方??报错

这种做法符合一般的规范么?

按照我的理解,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值。比较好理解。
   }
}



4、代码进行一些修改,在这种情境下,可以正常工作。如下:

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到底是来干嘛的。。。




展开
收起
爱吃鱼的程序员 2020-06-14 20:44:02 800 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    你这个理解有问题,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~
    2020-06-14 20:44:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载