AlertDialog не показывает положительную и отрицательную кнопку в Samsung Galaxy s4

Я отобразил AlertDialog с двумя кнопками, т.е. Да и Отмена, вот код.

final AlertDialog.Builder builder = new AlertDialog.Builder(RiderDetailActivity.this);
builder.setCancelable(false);
builder.setMessage("Are you sure?");

final AlertDialog dialog = builder.create();
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        dialog.dismiss();
    }
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        dialog.dismiss();
    }
});
dialog.show();

Это не показывает кнопку `` да '' и `` отменить '' только на samsung galaxy s4

введите описание изображения здесь

Но когда я использую его с dialog.setButton, он отлично работает

dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        dialog.dismiss();
    }
});
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        dialog.dismiss();
    }
});

введите описание изображения здесь

Примечание. builder.setPositiveButton и builder.setNegativeButton создают проблемы только на Samsung Galaxy S4, на других устройствах он работает отлично.

ОБНОВИТЬ

Мне нужно создать диалог после настройки кнопок на конструктор, но меня беспокоит, почему он работал с другими устройствами и просто создавал проблему с Samsung Galaxy S4?


person Ravi    schedule 11.01.2017    source источник
comment
final AlertDialog dialog = builder.create(); добавьте эту строку над dialog.show(); и посмотрите   -  person Manohar    schedule 11.01.2017
comment
@Redman: да, это работает, но почему раньше он работал с другими устройствами и эмуляторами? Если это моя ошибка, он не должен работать и с другими устройствами.   -  person Ravi    schedule 11.01.2017
comment
это ожидаемое поведение, поскольку вы добавляете кнопки в построитель после создания диалога. Переместите свой final AlertDialog dialog = builder.create();после добавления кнопки   -  person Vladyslav Matviienko    schedule 11.01.2017
comment
@VladMatvienko да, я понял, но в этом случае он не должен работать с другими устройствами и эмуляторами.   -  person Ravi    schedule 11.01.2017
comment
это может не работать. Есть много недокументированных возможностей.   -  person Vladyslav Matviienko    schedule 11.01.2017
comment


Ответы (4)


Попробуйте так. Надеюсь, это сработает для вас.

 final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setCancelable(false);
    builder.setMessage("Are you sure?");
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            dialogInterface.dismiss();
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            dialogInterface.dismiss();
        }
    });
    final AlertDialog dialog = builder.create();
    dialog.show();
person SANJAY GUPTA    schedule 11.01.2017
comment
да, это работает, но почему раньше он работал с другими устройствами и эмуляторами? - person Ravi; 11.01.2017
comment
Иногда ОС Samsung создает проблемы с Android. Проголосуйте за ответ. - person SANJAY GUPTA; 11.01.2017
comment
вау красивое объяснение, можете ли вы мне сказать, что такое ос самсунг? я думал это был андроид - person Manohar; 11.01.2017
comment
Я знаю, что Самсунг тоже базируется на ОС Android. Но слухи, что я слышал, что Samsung также что-то модифицирует при установке Android на свои устройства, потому что иногда у меня также возникают проблемы только в samsung, в то время как код работает нормально на других устройствах - person SANJAY GUPTA; 11.01.2017

После вашего alertDialog.show() метода добавьте эти две строки

alertDialog.getButton(alertDialog.BUTTON_NEGATIVE).setTextColor(ContextCompat.getColor(_context, R.color.red));
alertDialog.getButton(alertDialog.BUTTON_POSITIVE).setTextColor(ContextCompat.getColor(_context, R.color.red));
person Piyush    schedule 11.01.2017
comment
Означает ли это, что раньше была кнопка, но с прозрачным цветом текста? - person Ravi; 11.01.2017
comment
Я не уверен на 100%, но на некоторых устройствах это не отображается. - person Piyush; 11.01.2017

Вы создаете свой диалог перед добавлением кнопок.

Просто двигайся

final AlertDialog dialog = builder.create();

после настройки ваших кнопок

person beal    schedule 11.01.2017
comment
да, это работает, но почему раньше он работал с другими устройствами и эмуляторами? - person Ravi; 11.01.2017
comment
@RaviRupareliya, как вы знаете, Samsung слишком сильно настраивает исходную версию Android, поэтому Samsung создает проблему. Xiomi Redmi - то же самое, что и Samsung, возможно, если вы протестируете с этим устройством, у вас тоже могут возникнуть эти проблемы. - person Harsh Dalwadi; 12.01.2017

Вы можете попробовать с помощью этого кода ..

 new AlertDialog.Builder(this)
                .setTitle("Add new Title")
                .setMessage("Type Message here")
                .setPositiveButton("Add", (dialog, whichButton) -> {
                   // Onclick event Here
                })
                .setNegativeButton("Close",(dialog, i) -> {

                })
                .show();
person Jigar Patel    schedule 12.01.2017