2013-12-19 58 views
0

我創建具有這種佈局的定製對話框(冠軍,圖像,文本,2個按鈕):機器人 - 對話不工作

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical|center_horizontal" 
    android:background="@color/white"> 
    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingLeft="30dip" 
     android:paddingTop="10dip"> 
     <ImageView 
      android:id="@+id/dialog_title_image" 
      android:layout_alignParentLeft="true" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/info"/> 
     <TextView 
      android:id="@+id/dialog_title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dip" 
      android:layout_centerInParent="true" 
      android:text="Title" 
      android:layout_toRightOf="@id/dialog_title_image" 
      android:textColor="@color/black" 
      android:textSize="30sp"/> 

    </RelativeLayout> 
    <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="2dip" 
      android:background="@color/header_grep" 
      android:layout_marginTop="5dip"/> 
    <TextView 
     android:id="@+id/dialog_msg" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textColor="@color/dark_gray" 
     android:layout_marginTop="10dip" 
     android:layout_marginLeft="10dip"/> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="10dip" 
     android:gravity="bottom|center_horizontal" 
     android:paddingBottom="5dip"> 
     <Button 
      android:id="@+id/positive_button" 
      android:layout_alignParentLeft="true" 
      android:layout_width="100dip" 
      android:layout_height="wrap_content" 
      style="@style/Gradient" 
      android:text="Si"/> 
     <Button 
      android:id="@+id/negative_button" 
      android:layout_width="100dip" 
      style="@style/Gradient" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@id/positive_button" 
      android:text="No"/> 
    </RelativeLayout> 


</LinearLayout> 

這是CustomDialog.java

public class CustomDialog extends Dialog { 

    Context context; 

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


    public CustomDialog(Context context, int theme) { 
     super(context, theme); 
     // TODO Auto-generated constructor stub 
     this.context = context; 
    } 


    public CustomDialog(Context context, boolean cancelable, 
      OnCancelListener cancelListener) { 
     super(context, cancelable, cancelListener); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     this.setContentView(R.layout.custom_dialog); 
    } 

} 

這在方法我實現顯示它:

 private void showDialog(String msg, String title) 

    { 
     final Dialog dialog = new CustomDialog(this); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setContentView(R.layout.custom_dialog); 

    TextView title_dialog = (TextView) dialog.findViewById (R.id.dialog_title); 
    title_dialog.setText(title); 

    TextView text = (TextView) dialog.findViewById(R.id.dialog_msg); 
    text.setText(msg); 

    Button positiveButton = (Button) dialog.findViewById(R.id.positive_button); 
    Button negativeButton = (Button) dialog.findViewById(R.id.negative_button); 

    positiveButton.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View arg0) { 

      finish(); 
     } 

    }); 

    negativeButton.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View arg0) { 

      dialog.dismiss(); 
     } 

    }); 

    dialog.show(); 

} 
當我啓動應用程序和對話

所示,標題和文本是那些d在xml文件中定義(所以'標題'和對話框的主體沒有任何內容),如果我點擊按鈕沒有任何反應。 任何人都可以幫助我嗎?先謝謝你。

+2

嘗試'最終對話框=新對話框(YourActivity.this);' –

+1

謝謝你的傢伙!它現在有效!你能解釋我做錯了什麼嗎? – SegFault

+0

@SegFault你做了什麼改變,使其工作? – keshav

回答

1

您必須在對話框上傳遞應用程序上下文。如果您將此作爲上下文傳遞並且您從按鈕onclick()事件中調用了customdialog,那麼它將此引用爲button onclicklistner()對象,這是錯誤的。所以你必須通過你的活動或你的應用上下文。

final Dialog dialog = new CustomDialog(yourappliactioncontext); 
0

試試看:

final Dialog dialog = new Dialog(YourActivity.this);

,而不是

final Dialog dialog = new Dialog(context);

如果你要重用這個代碼,作爲一個可重用的組件或作爲一種機制來創建在多個地方創建對話框,創建一個基本活動類並在其中使用此方法,並根據需要將其用於子分類活動。