Ich habe ein Dokument fragment
das ist innerhalb viewpager
und ich benutze die gleiche Dokument Fragment Instanz in einem anderen Teil der Anwendung. Mein Problem ist, dass ich im Fragment einen Broadcast-Empfänger registriere, normalerweise entferne ich es Methode in Fragment. Aber Fragmente Methode wird nicht aufgerufen, wenn ich einen anderen wechseln. Also nächstes Fragment von viewpager
Ich benutze neue Instanz des Dokumentfragments und ich erstelle auch neue Instanz des Empfängers. Aber onReceive
Methode Empfänger ruft Viewpager Dokument fragment
Methode. Wenn ich also logcat ansehe, kann ich sehen, dass ich den Empfänger nicht abmelden kann. Wie kann ich den Empfänger abmelden, kann ich eine Liste der registrierten Empfänger erhalten?Android Viewpager Fragment lifecyle
Antwort
Versuchen Sie, Broadcast-Empfänger im ViewPager OnPageChangeListener
zu registrieren und die Registrierung aufzuheben. Dieser Listener enthält 3 Methoden, nämlich onPageScrollStateChanged(int state)
, onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
und onPageSelected(int position)
.
Verwenden Sie onPageScrolledStateChanged()
Methode. Es verwendet 3 Zustände zur Überwachung der Fragmente innerhalb des ViewPagers. Verwenden Sie SCROLL_STATE_DRAGGING
für die Registrierung Ihres BroadcastReceiver und SCROLL_STATE_SETTLING
für die Registrierung Ihres BroadcastReceiver.
Vielleicht können Sie setUserVisibleHint() -Methode in Ihrem Fragment verwenden ... Oder eine andere Idee, registrieren OnPageChangeListener auf Ihrer Ansicht Pager und von diesem Hörer können Sie Call-Methode für austragen Ihre Empfänger manuell die ...
Danke Alles für Ihre Antworten, wie Sie gesagt, ich implementiert OnPageChangeListener
und erstellt eine Logik, es funktioniert jetzt gut. Vielen Dank noch einmal, ich poste den Code:
@Override
public void onPageSelected(int position) {
Fragment currentFragment = adapterViewPager.getRegisteredFragment(position);
if(currentFragment.getClass()==Document.class){
Log.i (AppConfig.TAG,"Current Fragment is Document");
Document document = (Document)currentFragment;
document.registerDownloadService();
}
if(lastFragment!=null && lastFragment.getClass()==Document.class){
Log.i (AppConfig.TAG,"Previous Fragment is Document");
Document document = (Document)lastFragment;
document.unregisterDownloadService();
}
lastFragment = currentFragment;
}
Welchen Adapter verwenden Sie zum Aufblasen von Fragmenten im ViewPager? –
Ich benutze FragmentStatePagerAdapter, bei getItemMethod erstelle ich Fragmente wie Document.newInstance(); nach Position – Hmm
Ich habe eine Antwort unten gepostet. Bitte schau es dir an. Wenn Sie noch Fragen haben, zögern Sie nicht zu fragen. –