android - Dialog无法正常工作

时间:2013-12-19 13:40:25

标签: android android-alertdialog

我正在创建一个具有此布局的自定义对话框(标题包含图像,文本,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();

}

当我启动应用程序并显示对话框时,标题和文本是在xml文件中定义的那些(所以'标题',对话框的主体没有任何内容)如果我点击按钮没有任何反应。 谁能帮我?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您必须在Dialog上传递Application上下文。如果您将此作为上下文传递,并且您从按钮onclick()事件调用customdialog,那么它将此作为按钮onclicklistner()对象引用,这是错误的。所以你必须通过你的活动或你的申请背景。

final Dialog dialog = new CustomDialog(yourappliactioncontext);

答案 1 :(得分:0)

尝试一下:

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

而不是

final Dialog dialog = new Dialog(context);

如果要重用此代码,作为可重用组件或在多个位置创建对话框的机制,请创建基本活动类并在其中使用此方法,并根据需要在子类活动中使用它。