Get context inside onClick(DialogInterface v, int

2020-01-26 05:40发布

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?

4条回答
唯我独甜
2楼-- · 2020-01-26 06:12

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.

查看更多
Lonely孤独者°
3楼-- · 2020-01-26 06:18

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.

查看更多
我欲成王,谁敢阻挡
4楼-- · 2020-01-26 06:25

inside setOnClickListener

decelare this below the class

Context context = this;

and use this context

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

查看更多
霸刀☆藐视天下
5楼-- · 2020-01-26 06:31

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.

查看更多
登录 后发表回答