Aktualisieren Sie eine Listenansicht in einem Fragment von einem Broadcast-Empfänger

Ich muss eine Listenansicht in einem Fragment aktualisieren, wenn eine Datei erfolgreich herunterkommt. Also in meinem Download-Manager BroadcastReceiver Ich registriere diesen neuen Rundfunkempfänger:

Intent intent = new Intent(); intent.setAction("CONTENTS_NOTIFICATION"); context.sendBroadcast(intent); 

Und in meinem Fragment in onCreateView füge ich den folgenden Code hinzu, um den Empfänger zu registrieren:

  • Android - Erstellen von benutzerdefinierten Launcher
  • Reagiere native errorTimeout, die Geräteliste erhält. Beim Laufen Hallo Welt auf Ubuntu
  • Android 6.0 Marshmallow BLE Konnektivität Probleme
  • Import von Google-Play-Services lib in Intellij IDEA 12 (und 13)
  • Zerstöre den Artikel aus dem ViewPager-Adapter, nachdem die Bildschirmausrichtung geändert wurde
  • Wie kann man Button dynamisch in Android erstellen?
  •  IntentFilter filter = new IntentFilter("CONTENTS_NOTIFICATION"); getActivity().getApplicationContext().registerReceiver(myReceiver, filter); 

    dann:

     private BroadcastReceiver myReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { SQLiteDatabase db = DatabaseManager.getInstance(getActivity()).getWritableDatabase(); c = SelectedExperience.getSelectedExperiences(db); String id_esperienza = "Selected Experience"; if (c.getCount() != 0) { id_esperienza = c.getString(c.getColumnIndex(SelectedExperience.ID_ESPERIENZA)); } populateListview(v, id_esperienza); } }; 

    Und am Ende:

     public void onDestroyView() { super.onDestroyView(); getActivity().getApplicationContext().unregisterReceiver(myReceiver); } 

    Ich muss zwei dieser Rundfunkempfänger für zwei verschiedene Fragment hinzufügen. Auf der ersten, alles funktioniert gut Wenn in der Anwendung der Benutzer auf dem Fragment ist, aktualisiert es, während auf dem zweiten Fragment bekam ich diese Fehler:

     03-15 07:32:40.474: E/AndroidRuntime(1692): FATAL EXCEPTION: main 03-15 07:32:40.474: E/AndroidRuntime(1692): java.lang.RuntimeException: Error receiving broadcast Intent { act=CONTENTS_NOTIFICATION flg=0x10 } in sample.actionscontentview.fragment.ContentsFragment$1@418e0850 03-15 07:32:40.474: E/AndroidRuntime(1692): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:768) 03-15 07:32:40.474: E/AndroidRuntime(1692): at android.os.Handler.handleCallback(Handler.java:725) 03-15 07:32:40.474: E/AndroidRuntime(1692): at android.os.Handler.dispatchMessage(Handler.java:92) 03-15 07:32:40.474: E/AndroidRuntime(1692): at android.os.Looper.loop(Looper.java:137) 03-15 07:32:40.474: E/AndroidRuntime(1692): at android.app.ActivityThread.main(ActivityThread.java:5191) 03-15 07:32:40.474: E/AndroidRuntime(1692): at java.lang.reflect.Method.invokeNative(Native Method) 03-15 07:32:40.474: E/AndroidRuntime(1692): at java.lang.reflect.Method.invoke(Method.java:511) 03-15 07:32:40.474: E/AndroidRuntime(1692): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 03-15 07:32:40.474: E/AndroidRuntime(1692): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 03-15 07:32:40.474: E/AndroidRuntime(1692): at dalvik.system.NativeStart.main(Native Method) 03-15 07:32:40.474: E/AndroidRuntime(1692): Caused by: java.lang.NullPointerException 03-15 07:32:40.474: E/AndroidRuntime(1692): at sample.actionscontentview.fragment.ContentsFragment.populateListview(ContentsFragment.java:194) 03-15 07:32:40.474: E/AndroidRuntime(1692): at sample.actionscontentview.fragment.ContentsFragment.access$0(ContentsFragment.java:111) 03-15 07:32:40.474: E/AndroidRuntime(1692): at sample.actionscontentview.fragment.ContentsFragment$1.onReceive(ContentsFragment.java:107) 03-15 07:32:40.474: E/AndroidRuntime(1692): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:758) 03-15 07:32:40.474: E/AndroidRuntime(1692): ... 9 more 

    Und der Code ist der gleiche! Ich kann nicht bekommen, warum es nicht funktioniert. Es sagt, dass es ein Problem mit populatelistView gibt, aber die gleiche Funktion funktioniert gut im Fragment, wenn nicht aus dem Broadcast-Receiver aufgerufen.

    Der einzige Unterschied, den ich zwischen diesen beiden Fragmenten denken kann, ist, dass derjenige, in dem das Update funktioniert, der erste ist, der geöffnet wird, wenn die Anwendung gestartet wird.

  • IntelliJ IDEA Logcat Navigation
  • Wie kann ich mit ksoap2 den Parameter auf einen Webservice übergeben?
  • C #: ModernHttpClient, Du verweist auf die portable Version in deiner App - du musst auf die Plattform (iOS / Android) Version verweisen
  • Gibt es einen üblichen Weg, um zu sagen, dass eine Zahl ein Zeichen zu einem Zeitpunkt gelesen werden sollte?
  • Service, der jede Minute läuft
  • Android Gradient auf Lollipop funktioniert nicht. - API 21
  • 3 Solutions collect form web for “Aktualisieren Sie eine Listenansicht in einem Fragment von einem Broadcast-Empfänger”

    Versuche es mit EventBus von GreenRobot https://github.com/greenrobot/EventBus

    Wenn deine Datei erfolgreich heruntergeladen wird, posten du eine Veranstaltung

     EventBus.getDefault().post(YourData.Downloaded); 

    Ihr Fragment wird für das Empfangen von Ereignissen registriert, vorzugsweise in der onStart () – Methode

     EventBus.getDefault().register(this); 

    Und es wird Veranstaltungen in onEvent-Methode erhalten:

     public void onEvent(Data.State) {} 

    Und dann kannst du deine listview leicht aktualisieren. Sie berichten auch davon ab, Ereignisse in der onStop () – Methode zu erhalten. Sie können die Daten in Ihrer Anwendung aufbewahren oder speichern. Es ist sehr einfach und eine schöne Lösung. Ich hoffe es hilft. Sie können so viele Fragmente registrieren, wie Sie es für dieses Event wünschen, sobald das EventBus das Event platziert, werden alle verfügbaren Fragmente, die für sie registriert sind, dieses Event erhalten.

    Ich weiß, das ist alt, aber wenn du mir aus deiner Erfahrung helfen kannst, als bitte bei meiner Ausgabe:

    Ich habe hier eine ähnliche Frage gestellt: Broadcast Receiver und Fragments . Du kannst nach dem Umgang suchen, den ich getan habe, obwohl ich denke, dass es einen besseren Weg geben sollte, dies zu tun.

    Einige schlagen vor, dass alle Sendungen auf die Aktivität gehen, die die Fragmente beherbergt und durch einen Zuhörer die Fragmente erzählen, dass sie die Ansicht basierend auf dem, was empfangen wurde, aktualisieren sollten. Dies könnte ein besserer Ansatz sein, aber es könnte auch noch null Zeiger auf die Sicht der Fragmente.

    Hier ist die detaillierte Post für, wie ich das gelöst habe.

    Nur die MainActivity-Instanz im Broadcast-Receiver zu haben und dann damit zu arbeiten

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.