給View設置多個Tag


    在項目過程中,有時候需要給一個控件設置多個tag的需求,最常見的就是在ListView中的item,如果有數據錯亂的行為,最好的辦法就是給當前的 view設置tag保存跟它一致的數據,

常見的設置Tag和取tag的方法為
  1. view.setTag(Object);
    view.getTag;
如果要設置多個Tag,此方法也有一個重載的方法
  1. view.setTag(int key,Object object);
    view.getTag(int key);

     

這個時候某些童鞋就會如此使用
  1. view.setTag(1,object);
    view.getTag(1);
重新Run一下 發現報一下錯誤
  1. E/AndroidRuntime: FATAL EXCEPTION: main
    Process: cn.vcinema.cinema, PID:6755
    java.lang.IllegalArgumentException:The key must be an application-specific resource id.
    at android.view.View.setTag(View.java:16284)
    at cn.vcinema.cinema.module.adapter.MovieDetailsHolder1.refreshView(MovieDetailsHolder1.java:91)
    at cn.vcinema.cinema.base.BaseHolder.setDate(BaseHolder.java:28)
    at cn.vcinema.cinema.base.MyBaseAdapter.getView(MyBaseAdapter.java:51)
    at cn.vcinema.cinema.widget.flipview.FlipView.getView(FlipView.java:477)
    at cn.vcinema.cinema.widget.flipview.FlipView.fillPageForIndex(FlipView.java:398)
    at cn.vcinema.cinema.widget.flipview.FlipView.setFlipDistance(FlipView.java:383)
    at cn.vcinema.cinema.widget.flipview.FlipView.setAdapter(FlipView.java:1123)
    at cn.vcinema.cinema.module.ui.MovieDetailsFragment.setData(MovieDetailsFragment.java:129)
    at cn.vcinema.cinema.presenter.MovieDetailsPresenter$1.onResponse(MovieDetailsPresenter.java:61)
    at retrofit.ExecutorCallAdapterFactory$ExecutorCallback$1.run(ExecutorCallAdapterFactory.java:86)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5065)
    at java.lang.reflect.Method.invokeNative(NativeMethod)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
    at dalvik.system.NativeStart.main(NativeMethod)

     

這個key必須是從Resource中得到,也就是說,必須是從  R文件 中應用的格式
 
所以,我們必須按照規則去使用
  1. 在res/value/attr.xml中創建兩個item,如果沒attr.xml則創建這個文件
    1. <item type="id" name="tag_first"/>
      <item type="id" name="tag_second"/>
     
  2. key直接引用attr文件中創建的id
    1. view.setTag(R.id.tag_first,object);
      view.getTag(R.id.tag_first);
好啦,基本的使用到這里就結束了,如果有什么問題希望大家積極留言!分享,是希望更多的人少走彎路!

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM