Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有默认主题的自定义AlertDialog_Java_Android_Android Alertdialog_Android Dialog - Fatal编程技术网

Java 具有默认主题的自定义AlertDialog

Java 具有默认主题的自定义AlertDialog,java,android,android-alertdialog,android-dialog,Java,Android,Android Alertdialog,Android Dialog,我正在尝试使用默认主题构建一个自定义的AlertDialog,以便在代码中的多个位置使用相同的AlertDialog。我通过扩展AlertDialog并编写自定义业务逻辑来确定对话框中的消息,从而创建了一个类。问题是,当我调用AlertDialog.show()时,我看到一个黑色的覆盖层,没有显示对话框。这是我的密码: public class ClosestShrutiDialog extends AlertDialog { private String mLessonId;

我正在尝试使用默认主题构建一个自定义的
AlertDialog
,以便在代码中的多个位置使用相同的
AlertDialog
。我通过扩展
AlertDialog
并编写自定义业务逻辑来确定对话框中的消息,从而创建了一个类。问题是,当我调用
AlertDialog.show()
时,我看到一个黑色的覆盖层,没有显示对话框。这是我的密码:

public class ClosestShrutiDialog extends AlertDialog {

    private String mLessonId;
    private Activity mActivity;
    private View mParentView;

    private OnClickedListener mOnClickListerner;

    public ClosestShrutiDialog(@NonNull Activity activity, final String lessonId, final View parentView) {
        super(activity);
        this.mLessonId = lessonId;
        this.mActivity = activity;
        this.mParentView = parentView;
    }

    public void setmOnClickListerner(OnClickedListener mOnClickListerner) {
        this.mOnClickListerner = mOnClickListerner;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        // My business login to decide the msg related params ....

        // showing message to user to select the alternate shruti ...
        final String msg = mActivity.getResources().getString(R.string.user_alternate_shruti_msg,
                userShrutiLabel,
                closestShruti.getLabel());

        this.setMessage(msg);
        this.setButton(android.support.v7.app.AlertDialog.BUTTON_POSITIVE,
                mActivity.getResources().getString(R.string.yes),
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        if(mOnClickListerner != null) {
                            mOnClickListerner.proceedWithChange(closestShruti);
                        }
                    }
                });
        this.setButton(android.support.v7.app.AlertDialog.BUTTON_NEGATIVE,
                mActivity.getResources().getString(R.string.cancel),
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
    }

    public interface OnClickedListener {
        void proceedWithChange(final Shruti closestShruti);
    }
}

我不知道为什么它无法拾取默认模板并显示它。当我使用
AlerDialog.Builder(Context)
时,没有创建自定义类,我能够正确地看到对话框。有什么建议吗?

非常老的问题:-)

自定义警报对话框-

自定义对话框主题-

**--java文件代码----**
AlertDialog.Builder=新建AlertDialog.Builder(this,R.style.MyAlertDialogStyle);
builder.setTitle(“AppCompatDialog”);
builder.setMessage(“Lorem ipsum dolor…”);
builder.setPositiveButton(“确定”,null);
builder.setNegativeButton(“取消”,null);
builder.show();
**----您可以将其放入xml文件中
styles.xml-自定义样式----**
#FFC107
#FFFFFF
#4CAF50
**---此外,您还可以添加新样式----**
#FFEB3B
@style/TextAppearance.AppCompat.Title
**---警觉的dialong风格---**
...
...
@样式/MyTitleTextStyle

我找到了解决方案。基本上,我不应该重写
AlertDialog
onCreate()
方法。如果我这样做,那么通常会提供一个用于渲染的布局。相反,无论我在上述代码中的
onCreate()
方法中做了什么,我都将它移到了另一个函数中,然后从类的构造中调用它,这对我来说很有用。代码类似于:

public class ClosestShrutiDialog extends AlertDialog {

    private String mLessonId;
    private Activity mActivity;
    private View mParentView;

    private OnClickedListener mOnClickListerner;

    public ClosestShrutiDialog(@NonNull Activity activity, final String lessonId, final View parentView) {
        super(activity);
        this.mLessonId = lessonId;
        this.mActivity = activity;
        this.mParentView = parentView;

        setupView();
    }

    public void setmOnClickListerner(OnClickedListener mOnClickListerner) {
        this.mOnClickListerner = mOnClickListerner;
    }


    private void setupView() {

        // My business login to decide the msg related params ....

        // showing message to user to select the alternate shruti ...
        final String msg = mActivity.getResources().getString(R.string.user_alternate_shruti_msg,
                userShrutiLabel,
                closestShruti.getLabel());

        this.setMessage(msg);
        this.setButton(android.support.v7.app.AlertDialog.BUTTON_POSITIVE,
                mActivity.getResources().getString(R.string.yes),
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        if(mOnClickListerner != null) {
                            mOnClickListerner.proceedWithChange(closestShruti);
                        }
                    }
                });
        this.setButton(android.support.v7.app.AlertDialog.BUTTON_NEGATIVE,
                mActivity.getResources().getString(R.string.cancel),
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
    }

    public interface OnClickedListener {
        void proceedWithChange(final Shruti closestShruti);
    }
}

我已经浏览了你之前发布的所有链接。我面临的问题是,我想显示AlertDialog的默认对话框弹出窗口,但我不想自定义它。
public class ClosestShrutiDialog extends AlertDialog {

    private String mLessonId;
    private Activity mActivity;
    private View mParentView;

    private OnClickedListener mOnClickListerner;

    public ClosestShrutiDialog(@NonNull Activity activity, final String lessonId, final View parentView) {
        super(activity);
        this.mLessonId = lessonId;
        this.mActivity = activity;
        this.mParentView = parentView;

        setupView();
    }

    public void setmOnClickListerner(OnClickedListener mOnClickListerner) {
        this.mOnClickListerner = mOnClickListerner;
    }


    private void setupView() {

        // My business login to decide the msg related params ....

        // showing message to user to select the alternate shruti ...
        final String msg = mActivity.getResources().getString(R.string.user_alternate_shruti_msg,
                userShrutiLabel,
                closestShruti.getLabel());

        this.setMessage(msg);
        this.setButton(android.support.v7.app.AlertDialog.BUTTON_POSITIVE,
                mActivity.getResources().getString(R.string.yes),
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        if(mOnClickListerner != null) {
                            mOnClickListerner.proceedWithChange(closestShruti);
                        }
                    }
                });
        this.setButton(android.support.v7.app.AlertDialog.BUTTON_NEGATIVE,
                mActivity.getResources().getString(R.string.cancel),
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
    }

    public interface OnClickedListener {
        void proceedWithChange(final Shruti closestShruti);
    }
}