View.setTag(key,object)异常:The key must be an application-specific resource id.
2016-03-22 16:43
537 查看
07-1113:43:26.184:E/AndroidRuntime(10229):FATALEXCEPTION:main
07-1113:43:26.184:E/AndroidRuntime(10229):java.lang.RuntimeException:UnabletostartactivityComponentInfo{com.txrj.sms/com.txrj.sms.activity.CreateMessageActivity}:java.lang.IllegalArgumentException:Thekeymustbeanapplication-specificresourceid.
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.ActivityThread.access$600(ActivityThread.java:128)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.os.Handler.dispatchMessage(Handler.java:99)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.os.Looper.loop(Looper.java:137)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.ActivityThread.main(ActivityThread.java:4517)
07-1113:43:26.184:E/AndroidRuntime(10229):atjava.lang.reflect.Method.invokeNative(NativeMethod)
07-1113:43:26.184:E/AndroidRuntime(10229):atjava.lang.reflect.Method.invoke(Method.java:511)
07-1113:43:26.184:E/AndroidRuntime(10229):atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
07-1113:43:26.184:E/AndroidRuntime(10229):atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
07-1113:43:26.184:E/AndroidRuntime(10229):atdalvik.system.NativeStart.main(NativeMethod)
07-1113:43:26.184:E/AndroidRuntime(10229):Causedby:java.lang.IllegalArgumentException:Thekeymustbeanapplication-specificresourceid.
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.view.View.setTag(View.java:12585)
07-1113:43:26.184:E/AndroidRuntime(10229):atcom.txrj.sms.activity.CreateMessageActivity.getRecipientItem(CreateMessageActivity.java:47)
07-1113:43:26.184:E/AndroidRuntime(10229):atcom.txrj.sms.activity.CreateMessageActivity.onCreate(CreateMessageActivity.java:41)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.Activity.performCreate(Activity.java:4470)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
07-1113:43:26.184:E/AndroidRuntime(10229):...11more
原因分析:
setTag是android的view类中很有用的一个方法,可以用它来给空间附加一些信息,在很多场合下都得到妙用。
setTag(Objecttag)方法比较简单,这里主要谈一谈带两个参数的setTag方法。
官方的api文档中提到:
“Thespecifiedkeyshouldbeaniddeclaredintheresourcesoftheapplicationtoensureitisunique(seetheID
resourcetype).KeysidentifiedasbelongingtotheAndroidframeworkornotassociatedwithanypackagewillcausean
bethrown.”
所以抛出IllegalArgumentException的原因就在于key不唯一,那么如何保证这种唯一性呢?定义一个final类型的int变量和硬编码一个值的方式都是行不通的。
<resources>
<itemtype="id"name="tag_first"></item>
<itemtype="id"name="tag_second"></item>
</resources>
07-1113:43:26.184:E/AndroidRuntime(10229):java.lang.RuntimeException:UnabletostartactivityComponentInfo{com.txrj.sms/com.txrj.sms.activity.CreateMessageActivity}:java.lang.IllegalArgumentException:Thekeymustbeanapplication-specificresourceid.
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.ActivityThread.access$600(ActivityThread.java:128)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.os.Handler.dispatchMessage(Handler.java:99)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.os.Looper.loop(Looper.java:137)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.ActivityThread.main(ActivityThread.java:4517)
07-1113:43:26.184:E/AndroidRuntime(10229):atjava.lang.reflect.Method.invokeNative(NativeMethod)
07-1113:43:26.184:E/AndroidRuntime(10229):atjava.lang.reflect.Method.invoke(Method.java:511)
07-1113:43:26.184:E/AndroidRuntime(10229):atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
07-1113:43:26.184:E/AndroidRuntime(10229):atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
07-1113:43:26.184:E/AndroidRuntime(10229):atdalvik.system.NativeStart.main(NativeMethod)
07-1113:43:26.184:E/AndroidRuntime(10229):Causedby:java.lang.IllegalArgumentException:Thekeymustbeanapplication-specificresourceid.
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.view.View.setTag(View.java:12585)
07-1113:43:26.184:E/AndroidRuntime(10229):atcom.txrj.sms.activity.CreateMessageActivity.getRecipientItem(CreateMessageActivity.java:47)
07-1113:43:26.184:E/AndroidRuntime(10229):atcom.txrj.sms.activity.CreateMessageActivity.onCreate(CreateMessageActivity.java:41)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.Activity.performCreate(Activity.java:4470)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
07-1113:43:26.184:E/AndroidRuntime(10229):atandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
07-1113:43:26.184:E/AndroidRuntime(10229):...11more
原因分析:
setTag是android的view类中很有用的一个方法,可以用它来给空间附加一些信息,在很多场合下都得到妙用。
setTag(Objecttag)方法比较简单,这里主要谈一谈带两个参数的setTag方法。
官方的api文档中提到:
“Thespecifiedkeyshouldbeaniddeclaredintheresourcesoftheapplicationtoensureitisunique(seetheID
resourcetype).KeysidentifiedasbelongingtotheAndroidframeworkornotassociatedwithanypackagewillcausean
toIllegalArgumentException
bethrown.”
所以抛出
如果只需要设置一个tag,那么直接调用setTag(Objecttag)方法就可以轻松搞定,如果一定需要使用多个tag绑定,那么需要先在res/values/ids.xml中添加
<resources>
<itemtype="id"name="tag_first"></item>
<itemtype="id"name="tag_second"></item>
</resources>
使用的时候写成
imageView.setTag(R.id.tag_first,"Hello"); imageView.setTag(R.id.tag_second,"Success");
就可以了
参考:/article/8852820.html
相关文章推荐
- java Object类 clone()方法 详解
- JAVA学习中,一个关于Object对象转换时对应方法的问题
- IOS之Objective-C学习 ARC下的单例模式
- iOS安全攻防(二十三):Objective-C代码混淆
- Objective-C里调用Swift
- 谈Objective-C block的实现
- Objective-C Runtime 运行时之四:Method Swizzling
- ES2015 - Object (6)
- iOS 原生二维码扫描crush([AVCaptureMetadataOutput setMetadataObjectTypes:] - unsupported type found. Use -)
- 分享你最喜欢的技巧和提示(Xcode,Objective-C,Swift,C...等等)--推酷
- objective-c static 与 extern 的用法
- 此证书的签发者无效 解决办法,亲测操作一边,可用了
- Objective-C之run loop详解
- Objective-C中NSString与int和float的相互转换
- jsonobject 遍历 org.json.JSONObject
- Objective-C对象与Core Foundation对象
- Newtonsoft.Json之JArray, JObject, JProperty,JValue
- object-c第三方FMDB对sqlite使用
- object-c第三方FMDB对sqlite使用
- C++ 进阶——object slicing 与虚函数与dynamic_cast<>