Get context inside onClick(DialogInterface v, int buttonId)?

AndroidDialogOnclickAndroid Context

Android Problem Overview


Getting the context inside onClick(View view), the callback for a button's onClickListener(), is easy:

view.getContext()

But I can't figure out how to get the context inside onClick(DialogInterface v, int buttonId), the callback for a dialog's onClickListener

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

Is this possible?

Android Solutions


Solution 1 - Android

You can reference an outer context when you define your DialogInterface.OnClickListener as an anonymous class. If you're in an activity you can use MyActivity.this as the context.

Edit - since your Activity is implementing DialogInterface.OnClickListener, you should be able to just use this as the context.

Solution 2 - Android

If your DialogInterface is within MainActivity, then you can get the context using

MainActivity.this.getActivityContext();

Btw You can also implement the DialogInterface (in your code sample, you have written implements twice) and the same statement can be used to get the activity context.

Solution 3 - Android

Here is how you do it in case you

  1. do not want to have any anonymous class usage
  2. or having your activity/fragment implement the interface directly.

Just simply,

  1. use dialogInterface object and cast it to Dialog object
  2. then call getContext()

Example with 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
    }
};

This will also work for the following interfaces as well, just use the first param DialogInterface dialogInterface and cast.

Solution 4 - Android

inside setOnClickListener

decelare this below the class

Context context = this;

and use this context

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionan00bView Question on Stackoverflow
Solution 1 - AndroidMatthew WillisView Answer on Stackoverflow
Solution 2 - AndroidKaranView Answer on Stackoverflow
Solution 3 - AndroidpeteyView Answer on Stackoverflow
Solution 4 - AndroidOscar FernandoView Answer on Stackoverflow