Android 从对话框中的按钮运行方法

Android 从对话框中的按钮运行方法,android,Android,我有一个对话框,在操作栏中按下按钮时弹出。对话框中有一个带有几个按钮的布局。其中一个按钮我只是想调用一个简单的方法来显示一个toast,只是为了表明它正在工作 这是来自显示对话框的初始按钮的方法: public void optionsPressed(MenuItem item){ final Dialog optionsDialog = new Dialog(this); optionsDialog.setTitle("Options"); optionsDialog.

我有一个对话框,在操作栏中按下按钮时弹出。对话框中有一个带有几个按钮的布局。其中一个按钮我只是想调用一个简单的方法来显示一个toast,只是为了表明它正在工作

这是来自显示对话框的初始按钮的方法:

public void optionsPressed(MenuItem item){
    final Dialog optionsDialog = new Dialog(this);
    optionsDialog.setTitle("Options");
    optionsDialog.setContentView(R.layout.options);
    optionsDialog.show();



}
这是布局的一部分,我正试图用这个按钮来显示祝酒词:

<ImageButton
            android:layout_width="@dimen/large_brush"
            android:layout_height="@dimen/large_brush"
            android:layout_margin="2dp"
            android:background="#FFFF66"
            android:layout_weight="1"
            android:onClick="paintClicked"
            android:tag="FFFF66" />
我正在尝试在这个方法中加入一些更重要的代码,而不仅仅是一个祝酒词,但是现在,在调试完我的应用程序之后,我甚至没有回到paintClicked方法,我不知道为什么

03-26 12:12:51.927: E/AndroidRuntime(17686): FATAL EXCEPTION: main
03-26 12:12:51.927: E/AndroidRuntime(17686): java.lang.IllegalStateException: Could not find a method paintClicked(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.ImageButton
03-26 12:12:51.927: E/AndroidRuntime(17686):    at android.view.View$1.onClick(View.java:3825)
03-26 12:12:51.927: E/AndroidRuntime(17686):    at android.view.View.performClick(View.java:4475)
03-26 12:12:51.927: E/AndroidRuntime(17686):    at android.view.View$PerformClick.run(View.java:18786)
03-26 12:12:51.927: E/AndroidRuntime(17686):    at android.os.Handler.handleCallback(Handler.java:730)
03-26 12:12:51.927: E/AndroidRuntime(17686):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-26 12:12:51.927: E/AndroidRuntime(17686):    at android.os.Looper.loop(Looper.java:137)
03-26 12:12:51.927: E/AndroidRuntime(17686):    at android.app.ActivityThread.main(ActivityThread.java:5419)
03-26 12:12:51.927: E/AndroidRuntime(17686):    at java.lang.reflect.Method.invokeNative(Native Method)
03-26 12:12:51.927: E/AndroidRuntime(17686):    at java.lang.reflect.Method.invoke(Method.java:525)
03-26 12:12:51.927: E/AndroidRuntime(17686):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
03-26 12:12:51.927: E/AndroidRuntime(17686):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
03-26 12:12:51.927: E/AndroidRuntime(17686):    at dalvik.system.NativeStart.main(Native Method)
03-26 12:12:51.927: E/AndroidRuntime(17686): Caused by: java.lang.NoSuchMethodException: paintClicked [class android.view.View]
03-26 12:12:51.927: E/AndroidRuntime(17686):    at java.lang.Class.getConstructorOrMethod(Class.java:423)
03-26 12:12:51.927: E/AndroidRuntime(17686):    at java.lang.Class.getMethod(Class.java:787)
03-26 12:12:51.927: E/AndroidRuntime(17686):    at android.view.View$1.onClick(View.java:3818)
03-26 12:12:51.927: E/AndroidRuntime(17686):    ... 11 more

您需要为按钮设置一个ID,然后执行以下操作:

Button button1;
button1 =(Button)optionsDialog.findViewById(R.id.button1);

button1.setOnClickListener(new OnClickListener() {
Toast.makeText(getApplicationContext(), "Color selected", Toast.LENGTH_LONG).show();
}
将paintClicked方法中的代码放入onclicklistener

在方法中执行此操作的示例:(我尚未测试此方法):


这将在当前活动中搜索
paintClicked
,如果在片段或对话框中有此方法,则不会找到它。因此:使用典型的setOnClickListener()并在那里实现您的函数,或者将此函数移动到活动(不推荐)

请共享您的日志;您是否有任何错误?那么应该将对话框声明为静态的?而不是在我使用的方法中?仍然不起作用,出于某种原因,这会破坏应用程序编辑我的答案,如果这仍然不起作用,请发布您的错误日志!
Button button1;
button1 =(Button)optionsDialog.findViewById(R.id.button1);

button1.setOnClickListener(new OnClickListener() {
Toast.makeText(getApplicationContext(), "Color selected", Toast.LENGTH_LONG).show();
}
public void optionsPressed(MenuItem item){
    final Dialog optionsDialog = new Dialog(this);
    optionsDialog.setTitle("Options");
    View dialogView = View.inflate(this, R.layout.options, null);
    button1 = (Button) dialogView.findViewById(R.id.button1);

    button1.setOnClickListener(new OnClickListener() {
       Toast.makeText(getApplicationContext(), "Color selected", Toast.LENGTH_LONG).show();
    }

    optionsDialog .setContentView(dialogView);
    optionsDialog .show();
}
    android:onClick="paintClicked"