2012-08-03 54 views
1

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

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; 
     } 
    }); 
+0

难怪它不工作。在创建并显示对话框的地方添加代码,然后添加缺失的部分。你显然正在夸大对话框布局。有一个地方可以添加按钮点击监听器。 – Maxim 2012-08-03 21:00:28

+0

我编辑我的问题,现在包括代码 – 2012-08-04 12:36:30

回答

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); 
0

也许你可以有一个活动与对话主题,比如你可以在你的清单

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

那么这种活动看起来完全一样一个对话框

0

Dialog类,有一种叫做findViewById(int id)方法。所以,如果你给你的按钮一个id,你应该用这个方法得到它的实例。然后,您可以使用方法setOnClickListener (View.OnClickListener l)将OnClickListener添加到按钮。除非你需要,因为它是从推荐代码添加按钮

+0

给我的错误:08-04 00:22:22.775:E/AndroidRuntime(10949):了java.lang.RuntimeException:无法启动活动 – 2012-08-03 21:24:34

+0

这是不正确的错误。 RuntimeException下面应该有一个。正如Maxim所说,你应该在你的问题中发布你的代码。 – 2012-08-04 11:39:54