Java 在静态内部类中访问外部类的方法

Java 在静态内部类中访问外部类的方法,java,android,Java,Android,这是访问Google API的一个片段: /* Called from ErrorDialogFragment when the dialog is dismissed. */ public void onDialogDismissed() { mResolvingError = false; } /* A fragment to display an error dialog */ public static class ErrorDialogFragment extends Dia

这是访问Google API的一个片段:

/* Called from ErrorDialogFragment when the dialog is dismissed. */
public void onDialogDismissed() {
    mResolvingError = false;
}

/* A fragment to display an error dialog */
public static class ErrorDialogFragment extends DialogFragment {
    public ErrorDialogFragment() { }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Get the error code and retrieve the appropriate dialog
        int errorCode = this.getArguments().getInt(DIALOG_ERROR);
        return GooglePlayServicesUtil.getErrorDialog(errorCode,
                this.getActivity(), REQUEST_RESOLVE_ERROR);
    }

    @Override
    public void onDismiss(DialogInterface dialog) {
        ((MainActivity)getActivity()).onDialogDismissed();
    }
}
如果代码在活动中,这一点就可以实现,那么如何获得
ondialogdisembled()
片段以在静态片段类中使用它呢

我用这个试过,似乎不起作用:

 @Override
    public void onDismiss(DialogInterface dialog) {
        ErrorDialogFragment innerClass = new OuterFragment.ErrorDialogFragment();

    innerClass.onDialogDismissed(); // Still cant find the method of the outer class
    }

使用
上下文
。无论何时调用外部类,只要传递上下文即可。 然后,您可以使用上下文来关闭对话框

尝试:


使用
上下文
。无论何时调用外部类,只要传递上下文即可。 然后,您可以使用上下文来关闭对话框

尝试:


ErrorDialogFragment
是一个
静态
(内部)类,因此,它直接访问外部类的静态上下文中的所有内容

方法
ondialogdisabled()不是外部类的
静态
上下文的一部分(即它不是
静态
),这就是为什么不能从内部类直接访问它


为了访问它,您需要一个外部类的实例。可能,
getActivity()
方法提供了这样的实例,这就是它在这种情况下工作的原因。
ErrorDialogFragment
是一个
static
(内部)类,因此它直接访问外部类的static上下文中的所有内容

方法
ondialogdisabled()不是外部类的
静态
上下文的一部分(即它不是
静态
),这就是为什么不能从内部类直接访问它

为了访问它,您需要一个外部类的实例。可能,
getActivity()
方法提供了这样的实例,这就是它在这种情况下工作的原因。

OnDialogDisabled()
不是
ErrorDialogFragment
的方法,因此这无法工作:

ErrorDialogFragment innerClass = new OuterFragment.ErrorDialogFragment();
innerClass.onDialogDismissed();
您可以使用
OuterClass。此
用于访问外部类的成员和方法,例如:

@Override
public void onDismiss(DialogInterface dialog) {
    OuterClass.this.onDialogDismissed();
}
如果仅使用
OnDialogDisabled()
编译器将假定该方法位于
ErrorDialogFragment
类中

但是,这将导致下一个问题,即
ondialogdisembled()
不是一个
静态的
方法,正如kocko正确指出的那样。

ondialogdisembled()
不是
ErrorDialogFragment
的方法,因此这无法工作:

ErrorDialogFragment innerClass = new OuterFragment.ErrorDialogFragment();
innerClass.onDialogDismissed();
您可以使用
OuterClass。此
用于访问外部类的成员和方法,例如:

@Override
public void onDismiss(DialogInterface dialog) {
    OuterClass.this.onDialogDismissed();
}
如果仅使用
OnDialogDisabled()
编译器将假定该方法位于
ErrorDialogFragment
类中


然而,这将导致下一个问题,即
ondialogdisembled()
不是一个
静态方法,正如kocko正确指出的那样。

只是想知道:
上下文从何而来?这是谷歌课程的一部分吗?上下文来自活动。只是想知道:
Context
来自哪里?这是谷歌课程的一部分吗?上下文来自活动。现在我明白了为什么。我还使用了这个
((OuterClass)getParentFragment()).onDialogDisabled()因为它嵌套在一个片段中。现在我明白了原因。我还使用了这个
((OuterClass)getParentFragment()).onDialogDisabled()因为它嵌套在片段中。