2015-03-25 186 views
0

這是訪問谷歌的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 
    } 

回答

2

ErrorDialogFragmentstatic(內)類和是這樣,它直接訪問一切從外部類的靜態上下文。

方法onDialogDismissed();不是外部類的static上下文的一部分(即它不是static),這就是它不能直接從內部類訪問的原因。

爲了訪問它,你需要一個外部類的實例。可能getActivity()方法提供了這樣的實例,這是它在這種情況下起作用的原因。

+0

現在我明白了爲什麼。我也用這個'((OuterClass)getParentFragment())。onDialogDismissed();'因爲它嵌套在一個片段中。 – Jan 2015-03-25 09:46:22

2

使用context。每當你調用外部類時,只需傳遞上下文。 然後你可以使用Context來dismiss這個對話框。

嘗試:

context..onDialogDismissed(); 
+0

只是想知道:上下文是從哪裏來的? Google是那個班的一部分嗎? – GhostCat 2015-03-25 09:43:44

+0

上下文來自活動。 – Amsheer 2015-03-25 09:46:19

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正確指出。

相關問題