gpt4 book ai didi

android - 自定义对话框 - 只有匿名听众才有效

转载 作者:搜寻专家 更新时间:2023-11-01 08:08:24 26 4
gpt4 key购买 nike

我在编写我的应用程序时遇到了一个“小”问题..我有自定义对话框单击按钮后显示的内容。在这个自定义对话框中,我有一些 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 属性所必需的。

来自documentation

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com