我希望能夠知道用戶何時可以實際看到我的小部件/片段中的內容(而不是僅僅知道小部件呈現在摺疊下方或緩存片段中,但可能永遠不會實際顯示) 。在Android上,如何判斷屏幕上顯示元素的時間?
我搜索了某種鉤子的高和低,讓你知道什麼時候顯示到屏幕上,但找不到一個。這樣的事情是否存在,或者這是Android忽視的東西?是否有可能以某種方式修補它,或者我只是運氣不好?
謝謝!
我希望能夠知道用戶何時可以實際看到我的小部件/片段中的內容(而不是僅僅知道小部件呈現在摺疊下方或緩存片段中,但可能永遠不會實際顯示) 。在Android上,如何判斷屏幕上顯示元素的時間?
我搜索了某種鉤子的高和低,讓你知道什麼時候顯示到屏幕上,但找不到一個。這樣的事情是否存在,或者這是Android忽視的東西?是否有可能以某種方式修補它,或者我只是運氣不好?
謝謝!
從Activity
類的文檔:
一個活動的整個壽命通過向的onDestroy單個最終呼叫第一次調用的onCreate(束)之間發生()。一個活動將在onCreate()中完成「全局」狀態的所有設置,並釋放onDestroy()中的所有剩餘資源。例如,如果它有一個在後臺運行的線程從網絡下載數據,它可能會在onCreate()中創建該線程,然後停止onDestroy()中的線程。
活動的可見生命週期發生在對onStart()的調用之間,直到對onStop()的相應調用。在此期間,用戶可以在屏幕上看到活動,但它可能不在前臺並與用戶進行交互。在這兩種方法之間,您可以維護向用戶顯示活動所需的資源。例如,您可以在onStart()中註冊BroadcastReceiver,以監視影響UI的更改,並在用戶不再看到您顯示的內容時,在onStop()中取消註冊。可以多次調用onStart()和onStop()方法,因爲活動對用戶可見並隱藏。
活動的前臺生命期發生在對onResume()的調用之間,直到對onPause()的相應調用。在此期間,活動在所有其他活動之前,並與用戶進行交互。一個活動可以頻繁地在恢復狀態和暫停狀態之間進行 - 例如,當設備進入睡眠狀態,活動結果被傳遞時,當新的意圖被傳遞時 - 所以這些方法中的代碼應該相當輕量級。
第二和第三點似乎清楚地提到了你要找的東西(onResume()
方法)。如果您使用的是碎片,則適用相同的規則。該片段的onResume()
方法將在該活動的onResume()
之後調用。
http://developer.android.com/reference/android/app/Activity.html http://developer.android.com/reference/android/app/Fragment.html#Lifecycle
編輯:
那麼,顯然沒有直接解決這個。我有一個想法,但它更像是一種即興而非適當的解決方案。此外,它可能會或可能不會工作。如果你在使用ViewPager
片段(含標籤),該FragmentPagerAdapter
將調用當前顯示的片段setUserVisibilityHint(true)
getUserVisibilityHint()
。ScrollView
用作容器,也許您可以偵聽滾動更改並確定您的片段是否可見或滾動出來。有關更多信息,請參閱this answer。View.isVisible()
檢查可見性。這些選項都不提供明確的基於事件的機制來檢查可見性,但也許可以以某種方式使用它們。一種方法是定義自己的回調,並重寫上述方法來調用它們。讓我知道如果你有任何這些方法(或其他方法)工作。
從那個widget/fragment中使用Toast怎麼樣? – learner
您是否在查看佈局中的單個「視圖」對用戶是否可見?如果是這樣,這個答案可能會幫助你:http://stackoverflow.com/a/12428208/3962091 – NoChinDeluxe
@NoChinDeluxe,它的問題是它告訴你*如果*視圖是可見的,但不*當*它變得可見。我們是否必須經常檢查以確定它何時發生? Android不應該有這樣的事件嗎? – TOB