- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在编写我的应用程序时遇到了一个“小”问题..我有自定义对话框单击按钮后显示的内容。在这个自定义对话框中,我有一些 TextView 和按钮..我想要以下内容:如果我单击对话框中的按钮,应用程序将开始调用(这不是问题所在,它会做任何事情)。
但问题是,我无法编写监听器。如果我一直在 xml 布局文件中编写监听器,我的应用程序就会崩溃。有一种解决方案——像匿名监听器一样编写监听器。但我不太喜欢匿名监听器(如果你在布局中有 100 个按钮,并且你需要为所有按钮添加匿名监听器,代码会很困惑)。
我不确定我是否需要编写 View.OnClickListener() 或 DialogInterface.OnClickListener() - 我认为是第一个,但我不确定。匿名监听器适用于 View 一,非匿名(在 xml 布局文件上)也不适用于一和秒。有人能告诉我“为什么”吗??
代码:
这项工作:
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.e("err","I am here");
}
});
这行不通:
-xml_layout_file
<Button
android:id="@+id/btn_startCall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick_startCall"
android:text="@string/btn_startCall" />
-myDialog.java(扩展对话框)
public void onClick_startCall(View v){
Log.e("err","I am here");
}
日志输出:
08-31 22:08:05.469: W/dalvikvm(9456): threadid=1: thread exiting with uncaught exception (group=0x40a3b1f8)
08-31 22:08:05.475: E/AndroidRuntime(9456): FATAL EXCEPTION: main
08-31 22:08:05.475: E/AndroidRuntime(9456): java.lang.IllegalStateException: Could not find a method onClick_startCall(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.Button with id 'btn_startCall'
08-31 22:08:05.475: E/AndroidRuntime(9456): at android.view.View$1.onClick(View.java:3031)
08-31 22:08:05.475: E/AndroidRuntime(9456): at android.view.View.performClick(View.java:3511)
08-31 22:08:05.475: E/AndroidRuntime(9456): at android.view.View$PerformClick.run(View.java:14105)
08-31 22:08:05.475: E/AndroidRuntime(9456): at android.os.Handler.handleCallback(Handler.java:605)
08-31 22:08:05.475: E/AndroidRuntime(9456): at android.os.Handler.dispatchMessage(Handler.java:92)
08-31 22:08:05.475: E/AndroidRuntime(9456): at android.os.Looper.loop(Looper.java:137)
08-31 22:08:05.475: E/AndroidRuntime(9456): at android.app.ActivityThread.main(ActivityThread.java:4673)
08-31 22:08:05.475: E/AndroidRuntime(9456): at java.lang.reflect.Method.invokeNative(Native Method)
08-31 22:08:05.475: E/AndroidRuntime(9456): at java.lang.reflect.Method.invoke(Method.java:511)
08-31 22:08:05.475: E/AndroidRuntime(9456): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
08-31 22:08:05.475: E/AndroidRuntime(9456): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
08-31 22:08:05.475: E/AndroidRuntime(9456): at dalvik.system.NativeStart.main(Native Method)
08-31 22:08:05.475: E/AndroidRuntime(9456): Caused by: java.lang.NoSuchMethodException: onClick_startCall [class android.view.View]
08-31 22:08:05.475: E/AndroidRuntime(9456): at java.lang.Class.getConstructorOrMethod(Class.java:460)
08-31 22:08:05.475: E/AndroidRuntime(9456): at java.lang.Class.getMethod(Class.java:915)
08-31 22:08:05.475: E/AndroidRuntime(9456): at android.view.View$1.onClick(View.java:3024)
08-31 22:08:05.475: E/AndroidRuntime(9456): ... 11 more
最佳答案
Dialog 类不扩展 Context,这是 onClick
属性所必需的。
This name must correspond to a public method that takes exactly one parameter of type View. For instance, if you specify android:onClick="sayHello", you must declare a public void sayHello(View v) method of your context (typically, your Activity).
你可以这样做:
OnClickListener startButtonListener = new View.OnClickListener() {
public void onClick(View v) {
Log.e("err","I am here");
}
});
稍后引用它:
b.setOnClickListener(startButtonListener);
如果这有助于您更好地组织代码(我喜欢它,以及 Orabig 的建议)。
关于android - 自定义对话框 - 只有匿名听众才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12221903/
这个问题在这里已经有了答案: Callback or Promise? [duplicate] (2 个答案) 关闭 7 年前。 我是一个巨大的 promise 链,但是我意识到其中一个函数返回一个
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: “On file dialog cancel” event in JavaScript 当用户点击文件上传对
我还在学习 flutter 。以下是本教程中的代码。当我调用Authservice配置文件时,它返回Observable>。如何获取其中的数据以进行显示。 这是我到目前为止所做的事情,但是它返回了整个
$(".cblClaimSources").on('click', ':checkbox', function (){ alert('im : '+ $(this).attr('id') +
首先,我知道这个问题已经被问过多次,但我的应用程序最近出现的问题激起了我对这个问题的兴趣。我也阅读了 Firebase 文档。 What is the difference between Child
由于 Tomcat 8.0 已停产,我想将我的应用程序直接升级到 Tomcat 9。 当我将基于 Java 的应用程序从本地部署到我的服务器时,我有一个脚本覆盖了 server.xml。我将服务器升级
我是一名优秀的程序员,十分优秀!