Я построил 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 ()
функция в созданном диалоге.