2013-12-19 37 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);

如果你要重用这个代码,作为一个可重用的组件或作为一种机制来创建在多个地方创建对话框,创建一个基本活动类并在其中使用此方法,并根据需要将其用于子分类活动。