Java 在静态内部类中访问外部类的方法
这是访问Google API的一个片段: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
/* 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()代码>因为它嵌套在片段中。