Wie benutzt man notifyDataSetChanged () im Thread

Ich schaffe einen Thread, um meine Daten zu aktualisieren und versuche, notifyDataSetChanged in meinem ListView zu machen.

 private class ReceiverThread extends Thread { @Override public void run() { //up-to-date mAdapter.notifyDataSetChanged(); } 

Der Fehler tritt bei der Zeile auf:

  • Leeres grafisches Layout?
  • Android: Wie bekomme ich eine benutzerdefinierte Ansicht Höhe und Breite?
  • Android Retrofit | Pflegen Sie benutzerdefiniertes Objekt (senden Sie Json an Server)
  • Generierung von .so Dateien in Android Studio 1.0.2 mit NDK
  • Erstellen Sie Listenansicht in Fragment Android
  • Zwei Richtungs-Scroll-Ansicht
  •  mAdapter.notifyDataSetChanged(); 

    Fehler :

    12-29 16: 44: 39.946: E / AndroidRuntime (9026): android.view.ViewRoot $ CalledFromWrongThreadException: Nur der ursprüngliche Thread, der eine Ansichtshierarchie erstellt hat, kann seine Ansichten berühren.

    Wie soll ich das ändern?

  • Wie man die untere Navigations-Registerkarte nach der neuen Google-Richtlinie implementiert
  • Ist Android-Unterstützung in der Nähe von Echtzeit-Push-Benachrichtigung?
  • Was ist der Unterschied zwischen einem Layout und einem Container in Android?
  • Holen Sie sich die Geschwindigkeit eines onTouch ACTION_MOVE Ereignisses in Android
  • Öffnen Sie den Browser mit der zuletzt besuchten URL
  • Erkennung der Rücktaste, aber entferne die Dialogfragment nicht
  • 4 Solutions collect form web for “Wie benutzt man notifyDataSetChanged () im Thread”

    Verwenden Sie runOnUiThread() -Methode, um die UI-Aktion aus einem Nicht-UI-Thread auszuführen.

     private class ReceiverThread extends Thread { @Override public void run() { Activity_name.this.runOnUiThread(new Runnable() { @Override public void run() { mAdapter.notifyDataSetChanged(); } }); } 

    Sie können die Ansichten der Benutzeroberfläche nicht von anderen Threads berühren. Für dein Problem kannst du entweder AsyncTask , runOnUiThread oder Handler verwenden .

    Alles Gute

    Sie können nicht Zugriff UI-Thread aus anderen Thread.Sie müssen Handler verwenden, um dies auszuführen.Sie können Nachricht an Handler in Ihrem Lauf-Methode und Update UI (rufen Sie mAdapter.notifyDataSetChanged ()) innerhalb Handler.

    Zugriff auf den UI-Thread aus anderen Threads

    Activity.runOnUiThread (Runnable)

    View.post (Runnable)

    View.postDelayed (Runnable, lang)

    Mein Ansatz, wenn ich andere Threads für Arbeit verwende:

     private AbsListView _boundedView; private BasicAdapter _syncAdapter; /** bind view to adapter */ public void bindViewToSearchAdapter(AbsListView view) { _boundedView = view; _boundedView.setAdapter(_syncAdapter); } /** update view on UI Thread */ public void updateBoundedView() { if(_boundedView!=null) { _boundedView.post(new Runnable() { @Override public void run() { if (_syncAdapter != null) { _syncAdapter.notifyDataSetChanged(); } } }); } } 

    Btw notifyDatasetChanged () -Methode hooks zu DataSetObservable-Klassenobjekt von AbsListView, das zuerst gesetzt wird, indem es die Methode AbsListView.setAdaptert (Adapter) einbezieht, indem sie den Callback auf Adapter.registerDataSetObserver (DataSetObserver) setzt;

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