3 回答

TA貢獻1803條經驗 獲得超6個贊
Activity是一個上下文,所以如果你只是檢查上下文是一個Activity并在必要時強制轉換它。
@Overridepublic void onAttach(Context context) { super.onAttach(context); Activity a; if (context instanceof Activity){ a=(Activity) context; }}
更新:有些人聲稱Context
永遠不會調用新的覆蓋。我已經完成了一些測試,并且無法找到這樣的場景,根據源代碼,它永遠不應該是真的。在我測試的所有情況下,SDK23之前和之后,都調用了它們Activity
和Context
版本onAttach
。如果您可以找到不是這種情況的場景,我建議您創(chuàng)建一個示例項目來說明問題并將其報告給Android團隊。
更新2:我只使用Android支持庫片段,因為錯誤在那里更快修復。如果你使用框架片段,那么上面的問題似乎沒有被正確調用覆蓋。

TA貢獻1812條經驗 獲得超5個贊
這是谷歌從另一個巨大的變化......所建議的修改:更換onAttach(Activity activity)
用onAttach(Context context)
,因為我墜毀在舊的API的應用程序onAttach(Context context)
在本地碎片將不會被調用。
我正在使用本機片段(android.app.Fragment),因此我必須執(zhí)行以下操作以使其在舊API上再次工作(<23)。
這是我做的:
@Overridepublic void onAttach(Context context) { super.onAttach(context); // Code here}@SuppressWarnings("deprecation")@Overridepublic void onAttach(Activity activity) { super.onAttach(activity); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { // Code here }}

TA貢獻1775條經驗 獲得超8個贊
如果使用框架片段且設備的SDK版本低于23,則OnAttach(Context context)
不會被調用。
我使用支持片段代替,因此棄用是固定的并且onAttach(Context context)
總是被調用。
- 3 回答
- 0 關注
- 2847 瀏覽
添加回答
舉報