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

时间:2015-03-25 09:30:47

标签: 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 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();
    }
}

如果代码在一个活动中,这是有效的,如何在静态片段类中使用onDialogDismissed()片段

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

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

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

3 个答案:

答案 0 :(得分:2)

使用context。每当你调用外部类时只需传递上下文。 然后你可以使用Context来dismiss对话框。

尝试:

 context..onDialogDismissed();

答案 1 :(得分:2)

ErrorDialogFragment是一个static(内部)类,就这样,直接访问外部类的 static 上下文中的所有内容

方法onDialogDismissed();不属于外部类的static上下文(即它不是static),这就是为什么它不能直接从内心阶级。

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

答案 2 :(得分:1)

onDialogDismissed()不是ErrorDialogFragment的方法,所以这不起作用:

ErrorDialogFragment innerClass = new OuterFragment.ErrorDialogFragment();
innerClass.onDialogDismissed();

您可以使用OuterClass.this来访问外部类的成员和方法,例如:

@Override
public void onDismiss(DialogInterface dialog) {
    OuterClass.this.onDialogDismissed();
}

如果仅使用onDialogDismissed(),则编译器会假定该方法位于ErrorDialogFragment类中。

但是,这会导致onDialogDismissed()不是static方法的下一个问题 - 正如 kocko 指出的那样。