我工作的公司有一个应用程序,我已经开发了一段时间并且在 Android 4.4 上运行得非常好。在我们的一台 Nexus 5 获得 Lollipop 更新后,突然所有 onClicks 都不再起作用。我尝试在其他设备和虚拟机中运行我们的应用程序,但出现了同样的问题。由于专有代码的原因,我只能展示这么多,但这不应该成为问题。
第一个带有 onClick 的 Activity 是 LoginActivity,它扩展了 Activity 并且不触及片段或对话框(这是所有其他具有类似问题的结果引用的问题)。下面的示例来自一个按钮,该按钮应该让您选择服务器:
public class LoginActivity extends Activity{
...
public void btnLoginServer_clicked(View v){
Intent serversIntent = new Intent(LoginActivity.this,ServersActivity.class);
startActivity(serversIntent);
}
...
}
堆栈跟踪显示:
E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.company.app, PID: 2241
java.lang.IllegalStateException: Could not find a method btnLoginServer_clicked(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.Button with id 'btnLoginServer'
at android.view.View$1.onClick(View.java:3994)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.NoSuchMethodException: btnLoginServer_clicked [class android.view.View]
at java.lang.Class.getMethod(Class.java:664)
at java.lang.Class.getMethod(Class.java:643)
at android.view.View$1.onClick(View.java:3987)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
为了更好地衡量,这里是按钮的 xml。
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btnLoginServerNoServer"
android:id="@+id/btnLoginServer"
android:singleLine="true"
android:textColor="#de1bd500"
android:onClick="btnLoginServer_clicked"
android:background="@drawable/app_button_server_background" />
需要额外说明一下,该应用程序安装在两台 Android 4.4 设备上,升级到 5.0 后开始出现此问题。该应用程序被删除并重新安装,同样的问题。该应用程序已新安装在其他三台具有 5.0 但以前从未安装过该应用程序的设备上,同样的问题。对于几个不同的虚拟机也是如此。
请帮助我。我没有多少头发可以拔了,我担心我可能会把一些昂贵的东西扔到墙上。
最佳答案
我不确定我完全理解为什么这是解决方案,也许有人可以解释。
为应用程序制作了一个自定义主题,并将其应用于 list 中的应用程序。它还作为 android:theme="customTheme"应用于每个 Activity 布局 xml 文件。从布局中删除这些内容解决了问题。
希望这对其他人有帮助。
关于xml onClicks 不再适用于 android lollipop 中的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27555945/