在onClick中获取上下文(DialogInterface v,int buttonId)?

an0*_*00b 60 android dialog onclick android-context

获取内容的上下文onClick(View view),按钮的回调onClickListener()很容易:

view.getContext()
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何获得上下文中onClick(DialogInterface v, int buttonId),对于回调对话框onClickListener

public class MainActivity extends Activity implements android.content.DialogInterface.OnClickListener
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Mat*_*lis 102

将定义DialogInterface.OnClickListener为匿名类时,可以引用外部上下文.如果您在活动中,则可以将其MyActivity.this用作上下文.

编辑 - 自您的Activity实现以来DialogInterface.OnClickListener,您应该只能this用作上下文.

  • Tu Sum Up,使用`MyActivity.this` (6认同)

Kar*_*ran 18

如果您的DialogInterface在MainActivity中,那么您可以使用

MainActivity.this.getActivityContext();

顺便说一下您还可以实现DialogInterface(在您的代码示例中,您已经编写了两次实现),并且可以使用相同的语句来获取活动上下文.


pet*_*tey 13

以下是您如何做到这一点

  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
    }
};
Run Code Online (Sandbox Code Playgroud)

这也适用于以下接口,只需使用第一个参数DialogInterface dialogInterface和强制转换.

  • 您可以投射"DialogInterface"的事实比人们想象的更难找到.在那里节省了我很多时间. (2认同)