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>
Код работает нормально, вылетов нет. Когда фрагмент вызывается, фон тускнеет, но диалог не отображается. PS: Я новичок в разработке приложений для Android, поэтому, пожалуйста, объясните попроще. Я следил за этим уроком, но я изменил несколько вещей, чтобы дизайн диалогов был сделан по моему индивидуальному заказу.