在对话框布局中添加onClick to按钮,没有类

时间:2012-08-03 20:53:48

标签: android button dialog listener

我有对话框布局xml文件存储按钮,我已设置android:onClick="doSomething",但我没有附加到该对话框的任何类文件。所以实际上dialog_layout.xml是我项目中唯一的文件。我能够显示它并能够与它进行交互,但是我不能在对话框中为按钮创建onClick监听器。 我尝试将启动我的对话框的Activity作为该对话框的所有者,然后在该Activity中创建public void doSomething(View视图),但它似乎仍然无法正常工作。我收到这个错误:

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'

知道我做错了什么?

EDIT 这是代码:

@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;
        }
    });

3 个答案:

答案 0 :(得分:2)

您的代码看起来不错,除非您需要按照建议添加代码中的按钮。加载对话框布局后,需要添加以下代码。请注意,您需要摆脱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);

答案 1 :(得分:0)

也许你可以拥有一个具有对话框主题的活动,例如你可以在清单中使用

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

然后该Activity将完全像对话

答案 2 :(得分:0)

Dialog类中,有一个名为findViewById(int id)的方法。所以,如果你给你的按钮一个id,你应该用这个方法得到它的实例。然后,您可以使用方法setOnClickListener (View.OnClickListener l)向按钮添加OnClickListener。