2013-07-26 78 views
0

這是我的對話框dialog_date_range.xml佈局:自定義對話框的onClick錯誤

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:foo="http://schemas.android.com/apk/res/com.example.database_fragment" 
    android:id="@+id/dialog_body" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="match_parent" 
     android:layout_height="48dp" 
     android:onClick="toggleDateRange" 
     android:text="Button" /> 
</LinearLayout> 

在我的活動,我有:

public void toggleDateRange(View v) { 
    if(dialog == null) { 
     dialog = new Dialog(context, R.style.PauseDialogAnimation); 
     dialog.setCancelable(true); 
     dialog.setContentView(R.layout.dialog_date_range); 
     dialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation; 
    } 

    if(dialog.isShowing()) { 
     dialog.dismiss(); 
    } else { 
     dialog.show(); 
    } 
} 

這是當我點擊按鈕,我得到的錯誤:

FATAL EXCEPTION: main E/AndroidRuntime(25357): java.lang.IllegalStateException: 
Could not find a method toggleDateRange(View) in the activity class 
android.view.ContextThemeWrapper for onClick handler on view class 
android.widget.Button  
with id 'button1'at android.view.View$1.onClick(View.java:3586) 
+0

是您'toggleDateRange()'一個監聽器裏,內部類,什麼的類似?我假設你誇大了上述佈局並將其設置爲對話框? – codeMagic

+0

或者如果你真的想這樣做,那麼從setContentView的VIEW是不正確的。 我創建了一個新項目並添加了完全相同的代碼,並且它可以工作。檢查您是否在設置按鈕的視圖中。 –

+0

這可能聽起來很愚蠢,但請嘗試清理項目和重建?如果您不清潔 – NujnaH

回答

0

根據此答案,Android無法在對話框中找到活動的方法。因此,解決辦法是隻設置onClickListener的按鈕: java.lang.illegalstateexception could not find a method (view) in the activity class android fragment

更改您的代碼是這樣的:

public void toggleDateRange(View v) 
{ 
    if (dialog == null) 
    { 
     dialog = new Dialog(this, R.style.AppBaseTheme); 
     dialog.findViewById(R.id.button1).setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) 
      { 
       toggleDateRange(v); 

      } 
     }); 
     dialog.setCancelable(true); 
     dialog.setContentView(R.layout.dialog_date_range); 
     dialog.getWindow().getAttributes().windowAnimations = R.style.AppBaseTheme; 
    } 

    if (dialog.isShowing()) 
    { 
     dialog.dismiss(); 
    } 
    else 
    { 
     dialog.show(); 
    } 
} 
+0

在我的情況toggleDateRange()在我的活動類 – vovahost

+0

內您需要爲對話框中的按鈕設置onclicklistener。該對話框無法看到活動的方法toggleDateRange,因此您無法在xml中爲對話框設置它。看到我添加的代碼。 –

2

KISS - 保持簡單愚蠢(很抱歉的最後一個字:P)

<Button 
     android:id="@+id/button1" 
     android:layout_width="match_parent" 
     android:layout_height="48dp" 
     android:text="Button" /> 

implentent onClickListener

 Button btn1 = (Button)findViewById(R.id.button1); 
     btn1.setonClickListener(this); 

//實現的方法

@Override 
    public void onClick(View v) { 

     switch(v.getId){ 

     case R.id.button1:{ 

     //do here whatever you want 
    } 
} 
} 

或者如果你真的想要走那條路由的setContentView的觀點是不正確的。 我創建了一個新項目並添加了完全相同的代碼,並且它可以工作。檢查您是否在設置按鈕的視圖中。

+0

它實際上很簡單,在xml中做,因爲OP正在嘗試,它應該工作。我一直都在做 – codeMagic

+0

我想知道爲什麼它在xml中不起作用。 – vovahost