Как отключить / включить положительную кнопку из этого настраиваемого модуля alerttdialog? - PullRequest
0 голосов
/ 11 июня 2019

Я построил alerttdialog с пользовательским представлением, и у меня возникли проблемы с получением положительных и отрицательных кнопок. Я использовал alerttdialog.builder для создания моего диалога, но функция .getButton () недоступна после dialog.create. Я сделал что-то не так при построении моего диалога, или есть другой способ приблизиться к этому?

Я пытаюсь создать приложение для табло со стартовым экраном, на котором отображается список сохраненных игр, и кнопкой с плавающим действием для создания новой. При нажатии на него появляется диалоговое окно, в котором пользователь должен ввести название игры и имена двух игроков (еще предстоит добавить). При нажатии «ОК» (положительная кнопка диалога) приложение отображает всплывающее сообщение с названием игры и именами игроков, позже я заменю это созданием нового объекта «игра».

это вид, который отображается в диалоговом окне:

<android.support.constraint.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:paddingLeft="16dp"
android:paddingRight="16dp"
android:animateLayoutChanges="true">


<android.support.design.widget.TextInputLayout
    android:id="@+id/textInputLayout"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <android.support.design.widget.TextInputEditText
        android:id="@+id/txt_NewGame_Name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/hint_nameofnewgame"
        android:singleLine="true" />
</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
    android:id="@+id/textInputLayout3"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textInputLayout">

    <android.support.design.widget.TextInputEditText
        android:id="@+id/txt_NewGame_Player1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/Player1"
        android:singleLine="true" />
</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textInputLayout3">

    <android.support.design.widget.TextInputEditText
        android:id="@+id/txt_NewGame_Player2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/Player2"
        android:singleLine="true" />
</android.support.design.widget.TextInputLayout>

</android.support.constraint.ConstraintLayout>`

Эта функция вызывается при нажатии на fab:

public void newGame(){
    //Show dialog to make a new game
    DialogNewGame dialogNewGame = new DialogNewGame();
    dialogNewGame.show(getSupportFragmentManager(),"dialog new game");
}

и это класс (активность? Фрагментная активность?) Для моего диалога:

public class DialogNewGame extends AppCompatDialogFragment {

private TextInputEditText editText_title;
private TextInputEditText editText_namePlayer1;
private TextInputEditText editText_namePlayer2;

private DialogNewGameListener listener;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity());

    LayoutInflater inflater = requireActivity().getLayoutInflater();
    View dialogView = inflater.inflate(R.layout.dialog_newgame, null);

    builder.setTitle(R.string.title_newgame)
            .setView(dialogView)
            .setPositiveButton(R.string.Ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    String gameTitle = editText_title.getText().toString();
                    String namePlayer1 = editText_namePlayer1.getText().toString();
                    String namePlayer2 = editText_namePlayer2.getText().toString();
                    listener.applyInput(gameTitle, namePlayer1, namePlayer2);

                }
            })
            .setNegativeButton(R.string.back, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //ANNULEREN
                }
            });

    editText_title = dialogView.findViewById(R.id.txt_NewGame_Name);
    editText_namePlayer1 = dialogView.findViewById(R.id.txt_NewGame_Player1);
    editText_namePlayer2 = dialogView.findViewById(R.id.txt_NewGame_Player2);

    return builder.create();
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);

    try {
        listener = (DialogNewGameListener) context;
    } catch (ClassCastException e) {
        throw new ClassCastException(context.toString() + "must implement DialogNewGameListener");
    }
}

public interface DialogNewGameListener {
    void applyInput(String gameTitle, String namePlayer1, String namePlayer2);
}

Это то, что я ожидал: класс диалога использует alerttdialog.builder для возврата диалога при создании нового dialogNewGame (), и в этом диалоге я могу получить положительную кнопку, используя dialognewgame.getButton (AlertDialog.BUTTON_POSITIVE) Я не могу назвать getButton () функция в созданном диалоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...