Android 将onClick添加到对话框布局中的按钮,这不会';我没有课

Android 将onClick添加到对话框布局中的按钮,这不会';我没有课,android,button,dialog,listener,Android,Button,Dialog,Listener,我有存储按钮的对话框布局xml文件,我设置了android:onClick=“doSomething”,但我没有任何类文件附加到该对话框。所以实际上dialog_layout.xml是我项目中唯一的文件。我能够显示它并与之交互,但我无法为对话框中的按钮创建onClick侦听器。 我尝试让启动对话框的活动成为该对话框的所有者,然后在该活动中创建公共void doSomething(视图视图),但它似乎仍然不起作用。我得到这个错误: 08-03 23:39:23.085: E/AndroidRunt

我有存储按钮的对话框布局xml文件,我设置了android:onClick=“doSomething”,但我没有任何类文件附加到该对话框。所以实际上dialog_layout.xml是我项目中唯一的文件。我能够显示它并与之交互,但我无法为对话框中的按钮创建onClick侦听器。 我尝试让启动对话框的活动成为该对话框的所有者,然后在该活动中创建公共void doSomething(视图视图),但它似乎仍然不起作用。我得到这个错误:

08-03 23:39:23.085: E/AndroidRuntime(6757): java.lang.IllegalStateException: Could not find a method doSomething(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.Button with id 'button2'
知道我做错了什么吗

编辑 代码如下:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);

    findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
        //Do something.
        } 
    });




    Preference keyP = (Preference) findPreference("keyP");
    keyP.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference) {



            Dialog dialog = new Dialog(SettingsActivity.this);
            dialog.setContentView(R.layout.draws_dialog);
            dialog.setTitle("Title");
            dialog.show();

            return true;
        }
    });

也许您可以有一个带有对话框主题的活动,如清单中的活动

<activity android:name="MyDialog" android:theme="@android:style/Theme.Dialog"></activity>


然后,该活动将完全像一个对话框

对话框
类中,有一个名为的方法。因此,如果您给按钮一个id,您应该使用此方法获取其实例。然后,您可以使用该方法将OnClickListener添加到按钮。

您的代码看起来不错,除非您需要按照建议从代码中添加按钮。加载对话框布局后,需要添加以下代码。注意,您需要去掉xml布局中的按钮,在这种情况下,android将创建具有当前主题样式的按钮

dialog.setButton(Dialog.BUTTON_POSITIVE, "Do something", 
                 new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // TODO do something here
    }
});
return dialog;
如果您希望按钮具有特定的设计或功能,则可以使用以下选项:

dialog.setContentView(R.layout.draws_dialog);
Button myDialogButton = (Button)dialog.findViewById(R.id.my_button);
myDialogButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    }
});
单击侦听器可以移出对话框生成主体

private DialogInterface.OnClickListener myButtonClickListener = new
    DialogInterface.OnClickListener(DialogInterface dialog, int which) {
    // TODO: do something here with click
});
对话框生成主体将如下所示:

dialog.setButton(Dialog.BUTTON_POSITIVE, "Do something", myButtonClickListener);

难怪它不起作用。在创建和显示对话框的地方添加代码,然后我们将添加缺少的部分。显然,您正在扩大对话框布局。这里有一个添加按钮单击侦听器的位置。我编辑了我的问题,现在包含代码给我错误:08-04 00:22:22.775:E/AndroidRuntime(10949):java.lang.RuntimeException:无法启动活动这不是正确的错误。RuntimeException下面应该有一个。正如马克西姆所说,你应该在你的问题中发布你的代码。