使用DialogFragment的自定义警报对话框未按预期方式运行

问题描述 投票:0回答:1

我正在尝试实现一个自定义警报构建器,该构建器应显示我要使用的自定义布局。我创建了一个名为“ AlertDialogClass”的类,该类扩展了DialogFragment。我试图从片段中显示此警报生成器类。使用该AlertDialogClass时没有出现任何错误或崩溃,但应该显示的布局仅显示白屏。我尝试了很多事情,但似乎没有任何效果。我无法理解为什么会发生或我做错了什么。请原谅我的英语不好,帮我解决这个问题。

这是我的布局文件。

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="230dp"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:cardBackgroundColor="@color/backgroundElevation2dp"
    app:cardCornerRadius="14dp"
    app:cardElevation="8dp"
    >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="@dimen/padding18dp"
        android:gravity="center_horizontal"
        >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_alignParentTop="true"
            android:gravity="center_horizontal"
            >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Connection Not Available !!"
            android:textAppearance="@style/CardTextView"
            />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Please Check Your Internet Connection And Try Again"
            android:textAppearance="@style/CardTextViewSmall"
            android:layout_margin="@dimen/margin3dp"
            />

        </LinearLayout>

        <ImageView
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:src="@drawable/no_connection"
            android:layout_centerInParent="true"
            />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/btn_background1"
            android:text="Try Again"
            android:textAppearance="@style/CardTextView"
            android:layout_marginLeft="@dimen/margin38dp"
            android:layout_marginRight="@dimen/margin38dp"
            android:textAlignment="center"
            android:layout_alignParentBottom="true"
            android:padding="@dimen/padding5dp"
            android:id="@+id/adTryAgain"
            />
    </RelativeLayout>

</androidx.cardview.widget.CardView>

我的警报对话框类。

public class AlertDialogClass extends DialogFragment implements View.OnClickListener {

    private TextView tryAgainButton ;
    private AlertDialogClickInterface clickInterface ;


    public AlertDialogClass(AlertDialogClickInterface clickInterface) {
        this.clickInterface = clickInterface;
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {

        View layout = getActivity().getLayoutInflater().inflate(R.layout.alert_dialog,null);
        tryAgainButton = (TextView)layout.findViewById(R.id.adTryAgain);
        tryAgainButton.setOnClickListener(this);

        Dialog dialog = new Dialog(getActivity());
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(layout);

        return dialog;

    }


    @Override
    public void onClick(View v) {

        if (v.getId() == R.id.adTryAgain){
            clickInterface.OnAlertButtonClicked();
        }

    }

    public interface AlertDialogClickInterface {
        void OnAlertButtonClicked();
    }

}

我想显示警报对话框的片段。

try {

    if (CheckConnection.isConnected())
        getDataFromViewModel();

    else {

        AlertDialogClass dialogClass = new AlertDialogClass( this);
        dialogClass.show(getChildFragmentManager(),dialogClass.getTag());
    }
} catch (InterruptedException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

预期的布局应该是这样

Layout i created for alert builder

但是实际输出是这样的original output

这是我在文本视图中使用的样式

<style name="CardTextView" parent="TextAppearance.AppCompat.Widget.ActionBar.Subtitle" >
    <item name="android:textColor">@color/textColorWhite1</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">@dimen/textSize18</item>
    <item name="android:fontFamily">sans-serif-smallcaps</item>
</style>

<style name="CardTextViewSmall" parent="TextAppearance.AppCompat.Widget.ActionBar.Subtitle" >
    <item name="android:textColor">@color/textColorWhite2</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">@dimen/textSize14</item>
    <item name="android:fontFamily">sans-serif-smallcaps</item>
</style>

请帮帮我。预先谢谢你

android android-studio android-fragments android-alertdialog android-dialogfragment
1个回答
0
投票

尝试更改自:

        Dialog dialog = new Dialog(getActivity());
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(layout);

为此:

    Dialog dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    dialog.setContentView(layout);
© www.soinside.com 2019 - 2024. All rights reserved.