DialogFragment不显示

问题描述

我试图创建一个输入弹出对话框,我可以从任何活动中调用该对话框,并且该对话框必须将输入返回给被调用的活动。

我的片段通话

FragmentManager manager = getSupportFragmentManager();

InputDialog inputDialog = new InputDialog();

Bundle bundle = new Bundle();
bundle.putString("header","Enter new Name");
bundle.putString("hint","NAME");
bundle.putInt("type",InputType.TYPE_CLASS_TEXT);
bundle.putString("negative","Cancel");
bundle.putString("positive","Update");

inputDialog.setArguments(bundle);
inputDialog.show(manager,"frag_input_name");

我的DialogFragment类

public class InputDialog extends DialogFragment
{
    private TextView tvHeader;
    private EditText etInput;
    private Button buttPositive,buttNegative;

    private String header,hint,negative,positive,input;
    private Integer type;

    public interface InputDialogListener
    {
        void onFinishInputDialog(String input);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState)
    {
        View view = inflater.inflate(R.layout.dialog_input,container,false);

        tvHeader = view.findViewById(R.id.inputdiag_tv_header);
        etInput = view.findViewById(R.id.inputdiag_et_input);
        buttNegative = view.findViewById(R.id.inputdiag_button_negative);
        buttPositive = view.findViewById(R.id.inputdiag_button_positive);

        header = getArguments().getString("header");
        hint = getArguments().getString("hint");
        type = getArguments().getInt("type",InputType.TYPE_CLASS_TEXT);
        negative = getArguments().getString("negative");
        positive = getArguments().getString("positive");

        tvHeader.setText(header);
        etInput.setHint(hint);
        etInput.setInputType(type);
        buttNegative.setText(negative);
        buttPositive.setText(positive);

        buttNegative.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                InputDialog.this.dismiss();
            }
        });

        buttPositive.setonClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                input = etInput.getText().toString().trim();

                if(isInputValid(input))
                {
                    InputDialogListener activity = (InputDialogListener) getActivity();
                    activity.onFinishInputDialog(input);
                    InputDialog.this.dismiss();
                }
                else
                {
                    etInput.setError("Invalid Input");
                }
            }
        });

        getDialog().getwindow().setSoftInputMode(WindowManager.LayoutParams.soFT_INPUT_STATE_VISIBLE);

        return view;
    }

    private Boolean isInputValid(String input)
    {
        switch (type)
        {
            case InputType.TYPE_CLASS_TEXT: return isTextValid(input);
            case InputType.TYPE_CLASS_PHONE: return isPhoneValid(input);
            default: return false;
        }
    }

    private Boolean isTextValid(String input)
    {
        return input != null && input.trim().length() > 0;
    }

    private Boolean isPhoneValid(String input)
    {
        return Pattern.matches("[0-9]{10}",input);
    }
}

我的对话框xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:elevation="5dp">

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:elevation="5dp"
        app:cardCornerRadius="5dp"
        app:cardElevation="5dp"
        app:cardMaxElevation="5dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/inputdiag_tv_header"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dp"
                android:layout_marginBottom="20dp"
                android:text="@string/Test"
                android:textAlignment="center"
                android:textColor="@color/colorNFN"
                android:textSize="28sp"
                app:layout_constraintBottom_toTopOf="@+id/inputdiag_et_input"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <EditText
                android:id="@+id/inputdiag_et_input"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dp"
                android:background="@drawable/rounded_corner"
                android:ems="10"
                android:hint="@string/Test"
                android:importantForAutofill="no"
                android:inputType="textPersonName"
                android:paddingVertical="4dp"
                android:singleLine="true"
                android:textAlignment="center"
                android:textColor="@color/colorNFN"
                android:textSize="24sp"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/inputdiag_tv_header" />

            <Button
                android:id="@+id/inputdiag_button_negative"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="40dp"
                android:layout_marginBottom="20dp"
                android:text="@string/Test"
                android:textColor="@color/colorNFN"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toStartOf="@+id/inputdiag_button_positive"
                app:layout_constraintHorizontal_bias="0.5"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/inputdiag_et_input" />

            <Button
                android:id="@+id/inputdiag_button_positive"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:backgroundTint="@color/colorNFN"
                android:text="@string/Test"
                android:textColor="@color/LightGrey"
                app:layout_constraintBottom_toBottomOf="@+id/inputdiag_button_negative"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.5"
                app:layout_constraintStart_toEndOf="@+id/inputdiag_button_negative"
                app:layout_constraintTop_toTopOf="@+id/inputdiag_button_negative" />
        </androidx.constraintlayout.widget.ConstraintLayout>
    </androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>

代码工作正常,没有崩溃。 调用该片段时,背景变暗,但不显示对话框。 附注:我是Android应用程序开发的新手,因此请以简单的方式进行解释。 我一直在遵循this教程,但是我已经将对话框设计更改为我自己定制的一些内容

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...