2012-12-07 50 views
1

我是android開發的新手。我試圖通過在layout.xml中使用android:onClick爲自定義對話框中的按鈕設置事件處理程序。但是當我調試應用程序時,它表示在點擊自定義對話框中的按鈕時找不到源代碼。但是,當我在佈局文件中使用事件監聽器而不是屬性時,它運行良好。Android:如何通過android:onClick在custom_layout.xml中爲自定義對話框中的按鈕添加事件處理程序?

下面是一些代碼

其中包含按鈕1及以下

主要業務是該按鈕的事件處理程序

public void onClickButton1(View v) 
    { 
     MyCustomDialog a = new MyCustomDialog(this);   
     a.show();  
    } 

,這裏是MyCustomDialog類,另一個Java文件

public class MyCustomDialog extends Dialog { 

    Context m_context; 
    public MyCustomDialog (Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
     this.m_context = context;  
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
     this.setTitle("Custom Dialog"); 
     this.setContentView(R.layout.custom_dialog); 
    } 



    public void onClickButtonInDialog(View v) 
    { 
     AlertDialog a = new AlertDialog.Builder(this.m_context).create(); 
     a.setTitle("Ok"); 
     a.show(); 
    } 
} 

而且最後一個是自定義對話框佈局文件

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <Button 
     android:id="@+id/button_in_dialog" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:onClick="onClickButtonInDialog" 
     android:text="Add" /> 

</RelativeLayout> 
+0

您可以發佈上面使用代碼時的logcat輸出嗎? – varevarao

回答

2

這是不可能的。你必須註冊一個回調是這樣的:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.setTitle("Custom Dialog"); 
    View v = LayoutInflater.from(getContext()).inflate(R.layout.custom_dialog); 
    this.setContentView(v); 
    v.findViewById(R.id.button_in_dialog).setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onClickButtonInDialog(v); 
     } 
    }); 
} 
+0

「這不可能。」 - >我不確定這是完全正確的。看看這個鏈接:http://developer.android.com/reference/android/view/View.html#attr_android:onClick – varevarao

+0

他必須在傳遞給對話框的上下文中實現這個回調,因爲系統使用分配給對話框的上下文通過反射調用此回調。看起來,這不是Golff計劃的,除此之外,這不是一個好主意,因爲活動和對話不會像他們應該的那樣鬆散耦合。 –

+0

賓果。我想這只是一個......「弊端」的問題。 :d – varevarao

0

,你可以see here,這是可能做到這一點。但是您必須將onClick處理程序放在您設置視圖的同一活動的上下文中。如果可以使用Dialog上下文中的onClick,則他們沒有詳細提及詳細信息(或根本沒有提及) 。將監聽器放在您的活動中,並且只需創建對話框即可。這樣它將註冊監聽器,並且您仍然會擁有自定義對話框。

相關問題