在XML中指定主题和onClick会导致NoSuchMethodException将其归因于ContextThemeWrapper

时间:2015-06-17 21:41:27

标签: android android-layout android-theme

编辑:下面提供的答案是将android:theme的用法转换为简单的样式,所以android:theme =" @ style / foo"会变成style =" @ style / foo"

原帖:

我正在尝试清理我们的布局文件,因此我会考虑一些可以考虑的事情" style"元素和创建适当的块然后在布局中,各个组件使用android:theme来引用新的样式。一个例子是: 之前:

<TextView
    android:id="@+id/my_text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="12sp"
    android:textStyle="bold"
    android:onClick="onMyTextClick"
/>

后:

<TextView
    android:id="@+id/my_text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onMyTextClick"
    android:theme="@style/text_style"
/>

以及styles.xml文件

<style name="text_style">
    <item name="android:textSize">@dimen/font_small</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">@color/text_content_light</item>
    <item name="android:textAllCaps">true</item>
    <item name="android:padding">@dimen/padding_light</item>
</style>

运行它然后单击新的TextView将生成NoSuchMethodException,下面是一个示例堆栈跟踪。如果我删除android:主题行,它的工作正常....

06-17 17:12:44.306 E/AndroidRuntime( 3057): java.lang.IllegalStateException: Could not find a method onMyTextClick(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class TextView with id 'my_text_view'
06-17 17:12:44.306 E/AndroidRuntime( 3057):     at android.view.View$1.onClick(View.java:4215)
06-17 17:12:44.306 E/AndroidRuntime( 3057):     at android.view.View.performClick(View.java:5162)
06-17 17:12:44.306 E/AndroidRuntime( 3057):     at android.view.View$PerformClick.run(View.java:20873)
06-17 17:12:44.306 E/AndroidRuntime( 3057):     at android.os.Handler.handleCallback(Handler.java:739)
06-17 17:12:44.306 E/AndroidRuntime( 3057):     at android.os.Handler.dispatchMessage(Handler.java:95)
06-17 17:12:44.306 E/AndroidRuntime( 3057):     at android.os.Looper.loop(Looper.java:145)
06-17 17:12:44.306 E/AndroidRuntime( 3057):     at android.app.ActivityThread.main(ActivityThread.java:5837)
06-17 17:12:44.306 E/AndroidRuntime( 3057):     at java.lang.reflect.Method.invoke(Native Method)
06-17 17:12:44.306 E/AndroidRuntime( 3057):     at java.lang.reflect.Method.invoke(Method.java:372)
06-17 17:12:44.306 E/AndroidRuntime( 3057):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
06-17 17:12:44.306 E/AndroidRuntime( 3057):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
06-17 17:12:44.306 E/AndroidRuntime( 3057): Caused by: java.lang.NoSuchMethodException: onMyTextClick [class android.view.View]
06-17 17:12:44.306 E/AndroidRuntime( 3057):     at java.lang.Class.getMethod(Class.java:665)
06-17 17:12:44.306 E/AndroidRuntime( 3057):     at android.view.View$1.onClick(View.java:4208)
06-17 17:12:44.306 E/AndroidRuntime( 3057):     ... 10 more

0 个答案:

没有答案