2012-08-03 40 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

相關問題