Может ли кто-нибудь сказать мне, почему, если я объявляю AlertDialog, компилятор разрешает мне использовать такие методы, как setMessage() или setTitle()?

Dialog dialog = new Dialog(this);

Целевой уровень API - 15, минимальный - 8, поэтому код должен работать с API 8.

Большое спасибо!

0
wiki 31 Июл 2014 в 00:51
Не-Android-программист здесь, но Dialog отличается от AlertDialog?
 – 
helrich
31 Июл 2014 в 00:59
Сожалею! У меня такая же проблема с AlertDialog
 – 
wiki
31 Июл 2014 в 01:03

3 ответа

Лучший ответ
  • setMessage() не является методом класса Dialog, независимо от уровня API. Это метод AlertDialog.

  • Dialog(Context) и setTitle() работают под Android 8.

В общем, я без проблем использую следующий код с API 8. Это фрагмент кода, основанный на AlertDialog, но он звучит в соответствии с вашим вариантом использования, поскольку вы говорили о setMessage().

    AlertDialog dlg = null;

    if (!activity.isFinishing()) {
        final AlertDialog.Builder builder = new AlertDialog.Builder(activity);

        builder.setTitle(resTitle)
               .setMessage(text)
               .setCancelable(false)
               .setPositiveButton(resOk, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       if (notify != null) { // 'notify' is a Handler
                           notify.sendEmptyMessage(MODAL_ALERT_SEEN);
                       }
                       dialog.dismiss();
                   }
               }
        );

        dlg = builder.create();
        dlg.show();
    }

Дополнительные сведения можно найти в официальной документации API. Существует селектор уровня API, который выделяет методы, не применимые к уровню API, с которым вы хотите быть совместимым:

Compatibility level on the API documentation

2
Shlublu 31 Июл 2014 в 01:24
Очень хорошее решение! большое вам спасибо. Вы знаете, где я могу получить информацию о настройке AlertDialog?
 – 
wiki
31 Июл 2014 в 02:12
StackOverflow полон информации об этом. И ссылка, указанная @Gintas_ в его ответе, является действительно хорошей отправной точкой.
 – 
Shlublu
31 Июл 2014 в 10:20

Поскольку Dialog не имеет этих методов, это методы AlertDialog. Вместо этого используйте AlertDialog. Пример использования можно найти здесь.

1
Gintas_ 31 Июл 2014 в 01:05
  1. android: minSdkVersion = "8"
  2. android: targetSdkVersion = "15"

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setTitle("Alert Builder");
    alertDialogBuilder.setMessage("AlertDialog in API level 8");
    AlertDialog alertDialog = alertDialogBuilder.create();
    alertDialog.show();
    

    У меня работает Happy Coding.

1
VegeOSplash 31 Июл 2014 в 01:36