2012-06-30 52 views
1

Android中有0123則使用按活動,ActivityGroup,服務等的ComponentCallbacks interface。它們實現它並且某人在活動配置更改時通知他們。所以,我想創建自己的類,它實現了ComponentCallbacks監聽onConfigurationChanged並執行一些操作...所以我的類正在實現,但是...我想我需要註冊我的課程某人的觀察員。實施ComponentCallbacks來監聽onConfigurationChanged

那麼,有可能嗎?有什麼方法可以「註冊」我自己的類,以便在配置更改時收到通知。

我猜這個人可能是ActivityThread,它的方法collectComponentCallbacksLocked。但是我沒有看到任何註冊我自己的課程的方法。

ActivityThreadComponentCallbacks using

附:當然,我可以重寫Activity的方法onConfigurationChange更改,然後調用我的類的onConfigurationChanged方法,但我不想。我想知道是否有任何方式在Android中做到這一點。

+0

我想你不明白我的問題。 android:configChanges =「orientation | keyboardHidden」可以工作,它應該可以工作。我希望android通知我自己的類實現了ComponentCallbacks,配置發生變化 – pleerock

+0

在「Google I/O 2012 - 少做多少:做一個好的Android公民」的演講中(你可以在YouTube上找到),它說你可以通過調用Context.registerComponentCallbacks來做到這一點,但我也爲我自己的應用程序嘗試了這一點,這需要一個輸入參數,如下所示:context.registerComponentCallbacks(ComponentCallbacks callbacks),所以我不知道應該創建一些ComponentCallbacks實例..我認爲實現想要的接口就足夠了(就像類MyClass implements ...)。 – Sandra

+0

良好的通知,桑德拉!請將您的評論作爲回答 – pleerock

回答

4

在「谷歌I/O 2012 - 少花錢多辦事:是一個很好的Android公民」說話(你可以在YouTube上找到) ,解釋說您可以通過撥打Context.registerComponentCallbacks來完成此操作。 所以,你只需要讓你的類實現ComponentCallbacks接口(或者你想要的ComponentCallbacks2),那麼你可以覆蓋的方法會自動添加,並且從你的Activity,Fragment ..只是傳遞你的類中的實例來註冊它。事情是這樣的:

registerComponentCallbacks(mYourClass); 

這應該做的工作:)

0

你想要做的是註冊一個BroadcastReceiver接收此braodcast意圖:

Intent.ACTION_CONFIGURATION_CHANGED

該事件是由系統隨時配置更改播出。

1

據@桑德拉的答案,我們可以使用Context.registerComponentCallbacks來註冊自己的組件回調在系統中,使用這樣的:

context.registerComponentCallbacks(new ComponentCallbacks() { 

      @Override 
      public void onLowMemory() { 
       // make some operations when system memory is low 
      } 

      @Override 
      public void onConfigurationChanged(Configuration newConfig) { 
       // make some operations when configuration has been changed 
      } 
     }); 
當系統配置改變/上

我們所有的註冊的回調會被調用記憶不足。

方法registerComponentCallbacks可從API級別14結帳它是如何工作here

+0

如果您希望在API 14之前調用onConfigurationChanged,則應該在任何需要的類中覆蓋它。例如「Activity」,「Application」或任何「View」。我在'LinearLayout'中執行它,並放置在佈局固定類中。然後,如果配置改變,並在屏幕上的這種佈局 - 方法調用。不要忘記調用超級實現。 – Enyby