2016-03-05 43 views
0

代碼我從將棄用的「public void onAttach(Activity a)」更改爲什麼?

https://github.com/commonsguy/cw-omnibus/blob/master/Fragments/Static

下載包含在標題中提到的呼叫已不適用。

我改成了如下圖所示,最好的希望:

@Override 
public void onAttach(Context a) { // was (Activity a) 
    super.onAttach(a); 
    Log.d(getClass().getSimpleName(), " onAttach()"); 
} 

的Android 1.5.1工作室包括

import android.content.Context;後標記在任何.java文件中沒有行。

但我得到這個消息:

...fragmentsstatic W/dalvikvm: VFY: unable to resolve virtual method 105: Landroid/app/Fragment;.onAttach (Landroid/content/Context;)V

所以我應該怎麼做呢?

請注意,執行過程按預期進行,沒有例外。

+0

您需要重新考慮您的問題。我不明白你想問什麼。 –

+1

該方法已被api 23棄用,因此使用低於該版本的版本運行代碼仍將使用舊方法 –

+0

@ TudorLuca - 問題可能會被重新設置爲:「由於將'Activity'更改爲'Context'導致一個關於'Context'的消息,我應該做些什麼來避免這個消息?「。但我已經得到了一個很好的答案。 – DSlomer64

回答

1

包含標題中提及的不建議使用的調用。

從技術上講,它會覆蓋在API級別23.棄用方法的項目設置與API級別編譯19

所以我應該怎麼做呢?

選項#1:保持獨立。 onAttach(Activity)在API Level 11+上運行良好(因爲這是一個本地片段;反向端口從API Level 4+運行)。 API API 23以上的Android會嘗試找到onAttach(Context)並使用它,否則將回退到onAttach(Activity)

選項2:做你做的事,忽略警告。由於 Activity延伸 Context,尋找 onAttach(Activity)的較舊設備應該呼叫 onAttach(Context)。 API Level 23+設備尋找 onAttach(Context)會很高興。

更新:我只是想選擇2原生片段,我錯了:舊設備將忽略onAttach(Context)

選項#3:覆蓋兩種方法。 有可能 API Level 23+設備會同時調用這兩個設備;我沒有試過這個。舊設備仍然會撥打onAttach(Activity)

UPDATE:我剛剛嘗試了使用原生片段的選項#3,並且API Level 23+設備將調用onAttach()兩種風味。

+0

所以「**棄用**」並不意味着「不要使用這個」......?當我看到一個方法或其他項目中有一條線被繪製出來時,它確實看起來像是「不使用這個」就是信息。我認爲你的評論特別適用於'onAttach',而不是一般的貶低,但是我發現這句話:「當你在文檔中看到'棄用'時,通常意味着Android團隊建議你使用更好的選項。 「爭論繼續與另一個人說,「如果你不打算在以後的版本中刪除'它'爲什麼麻煩貶低'它'?」 – DSlomer64

+0

@ DSlomer64:棄用的問題在於Google棄用帽子的東西。這就像他們有配額或什麼的。因此,確定「棄用」意味着「逃離它尖叫」,「使用它,並計劃離開它」或「無論如何使用它」,都是一種藝術形式。 「當你在文檔中看到'棄用'時,通常意味着Android團隊建議你使用更好的選項」 - 該報價看起來很熟悉。 :-)關鍵詞是「通常」。 – CommonsWare

+0

@ DSlomer64:「如果你不打算在以後的版本中刪除'它',爲什麼還要貶低'它'?」 - 谷歌*很少* *徹底刪除的東西,出於向後兼容性的原因。 2008年爲Android 1.0編寫的應用程序仍然運行在Android 6.0上。他們可能有問題,但他們運行。 – CommonsWare

相關問題