2013-03-24 11 views
6

Utworzono niestandardowy widok, który można umieścić w różnych miejscach w aplikacji. Nie mogę uniknąć użycia BroadcastReceiver wewnątrz widoku, aby uzyskać wiadomości od reszty aplikacji.Zarejestruj się w lokalnej emisji w niestandardowym widoku.

Przeczytałem, że nie jest zalecane (Where should I unregisterReceiver in my own view?), ale na wypadek, gdy zdecyduję się go użyć, czy istnieje miejsce do wyrejestrowania widoku z BroadcastManager?

Odpowiedz

5

Proponuję użyć LocalBroadcastManager. To jak BroadcastReceiver, którego intencje można zobaczyć tylko wewnątrz aplikacji.

private BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // your code here 
    } 
}; 

@Override 
protected void onPause() { 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver); 
    super.onPause(); 
} 

@Override 
protected void onResume() { 
    LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this); 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction(MyClass.MY_ACTION); 
    lbm.registerReceiver(receiver, filter); 
    super.onResume(); 
} 
+0

To, co robię, ale ponieważ jestem rejestracji podczas tworzenia widoku niestandardowego (nie działalności, która ma onDestroy etc) faktycznie - nie mogę znaleźć odpowiednie miejsce do wyrejestrowania mój odbiornik. Tak więc obecnie nie:/ –

+3

Widok (lub widok niestandardowy) nie ma cyklu życia, takiego jak działanie lub usługa, więc nie możesz wiedzieć, kiedy jest zniszczony lub ukryty. Należy kontrolować wszystkie akcje rejestru/wyrejestrowania wszystkich widoków z działania, które je zawiera. – vggonz

+0

Przyjmę to jako odpowiedź, chociaż życzę sobie, aby niestandardowy widok był niezależny także w tym sensie. To naprawdę ogranicza ... Jeśli ktoś ma pomysł na ten temat, chciałbym usłyszeć, dziękuję. –

Powiązane problemy