Получить контекст внутри onClick (DialogInterface v, int buttonId)? - PullRequest
59 голосов
/ 27 марта 2011

Получить контекст внутри onClick(View view), обратного вызова для кнопки onClickListener(), легко:

view.getContext()

Но я не могу понять, как получить контекст внутри onClick(DialogInterface v, int buttonId),обратный вызов для диалога onClickListener

public class MainActivity extends Activity implements android.content.DialogInterface.OnClickListener

Возможно ли это?

Ответы [ 4 ]

100 голосов
/ 27 марта 2011

Вы можете ссылаться на внешний контекст, когда определяете DialogInterface.OnClickListener как анонимный класс.Если вы находитесь в действии, вы можете использовать MyActivity.this в качестве контекста.

Редактировать - поскольку ваша деятельность реализует DialogInterface.OnClickListener, вы можете просто использовать thisкак контекст.

18 голосов
/ 27 марта 2011

Если ваш DialogInterface находится в MainActivity, вы можете получить контекст, используя

<code>MainActivity.this.getActivityContext();

Кстати. Вы также можете реализовать DialogInterface (в вашем примере кода вы дважды написали реализации) ито же самое выражение можно использовать для получения контекста активности.

13 голосов
/ 26 февраля 2014

Вот как вы это делаете, если вы

  1. не хотите использовать анонимные классы
  2. или если ваша деятельность / фрагмент непосредственно реализуют интерфейс.

Просто,

  1. используйте dialogInterface объект и приведите его к Dialog объекту
  2. , затем вызовите getContext()

Пример с DialogInterface.OnClickListener :

DialogInterface.OnClickListener foo = new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int which) {
        Dialog dialog  = (Dialog) dialogInterface;
        Context context = dialog.getContext();
        // do some work with context
    }
};

Это также будет работать для следующих интерфейсов, просто используйте первый параметр DialogInterface dialogInterface и приведите.

0 голосов
/ 12 февраля 2019

внутри setOnClickListener

замедлить это ниже класса

Context context = this;

и использовать этот контекст

AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);

...