Get context inside onClick(DialogInterface v, int buttonId)?
AndroidDialogOnclickAndroid ContextAndroid 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
- do not want to have any anonymous class usage
- or having your activity/fragment implement the interface directly.
Just simply,
- use
dialogInterface
object and cast it toDialog
object - 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);