0

Ich hoffe, Sie können dabei helfen.Aktualisieren Recyclerview beim Posten eines Kommentars

Ich habe eine PostFragment, die eine RecyclerView aller Beiträge für einen Thread enthält. Die Idee ist, dass der Benutzer auf den FAB klickt, der sie zu einem NewPostActivity bringt, der ihnen erlaubt, zu antworten. Wie gehe ich über die Aktualisierung des Adapters in PostFragment, während ich 'Post' in NewPostActivity drücken.

Im Moment habe ich onResume im Fragment versucht, aber es funktioniert nicht. Hier ist mein Code für, wenn ich auf meine "Post" -Schaltfläche klicke.

private void addPost() { 

    String newPost = replaceHTMLTags(mPostMessage.getHtml()); 
    String threadID = PreferenceConnector.readString(getApplicationContext(), 
      "threadID"); 
    String username = PreferenceConnector.readString(getApplicationContext(), 
      "username"); 

    mDataFactory = new PostFeedDataFactory(this); 

    mDataFactory.createNewPost(threadID, newPost, username, 
      new PostFeedDataFactory.PostFeedDataFactoryCallback() { 
       @Override 
       public void onPostDataReceived(PostResponse response) { 
        Toast.makeText(getApplicationContext(), "Posted successfully", 
          Toast.LENGTH_LONG).show(); 
        finish(); 
       } 

       @Override 
       public void onPostDataFailed(Exception exception) { 
        Toast.makeText(getApplicationContext(), exception.getMessage(), 
          Toast.LENGTH_LONG).show(); 
        finish(); 

       } 
      }); 
} 

Und meine onResume ist im Grunde nur

@Override 
public void onResume() { 
    super.onResume(); 
    if (mAdapter != null) { 
     mAdapter.notifyDataSetChanged(); 
    } 
} 

Ich habe versucht, hier zu lesen, aber nicht wirklich etwas geeignet dazu finden.

Vielen Dank im Voraus.

+0

Werden die geposteten Daten in dieselbe Liste eingefügt, die sich im 'PostFragment' befindet? –

+0

Ja @ReazMurshed – BilalMH

+0

Bitte teilen Sie den Code, wie Sie den Adapter und die Liste festlegen. Ich sehe nicht, dass die Liste mit neuen Daten aktualisiert wird. 'onPostDataReceived' aktualisiert keine Liste –

Antwort

1

Es gibt eine Option statische Methode in Ihrer Tätigkeit zu schaffen, die dies tun werden:

if (mAdapter != null) { 
     mAdapter.notifyDataSetChanged(); 
    } 

Und es dann vor finish() in beiden Methoden der PostFeedDataFactoryCallback() zu nennen.

Wenn Sie die zweite Klasse als Aktivität starten, können Sie sie immer als startActivityForResult() starten und dann die Methode onActivityResult() implementieren. Sie benachrichtigen den Adapter über Änderungen. In diesem Fall, was fügen Sie vor jedem finish() sind dies:

setResult(Activity.RESULT_OK, your_data); 

Schauen Sie hier für ein Beispiel: https://tylenoly.wordpress.com/2010/10/27/how-to-finish-activity-with-results/

+0

mAdapter ist in einer anderen Klasse, wie könnte ich das tun? – BilalMH

+0

Sorry, lesen Sie es jetzt –

+0

Dies verwirrt mich immer noch, das ist einer der Bits, die ich nie wirklich getan habe und kann meinen Kopf nicht bekommen – BilalMH

0

ich nicht in dem Teil des Codes sehen, wo Sie den neuen Beitrag hinzufügen im Adapter. Sie müssen SetItems und dann notifyDatasetChanged aufrufen, um irgendeine Wirkung zu haben. Wenn sich das PostFragment in ActivityA befindet, das sich von NewPostActivity unterscheidet, können Sie den PostFragment-Lebenszyklus zum Aktualisieren des Adapters verwenden, indem Sie alle Posts als einfachste (nicht effizientere) Lösung abrufen.

+0

Aber es wird hinzugefügt, Coz wenn ich das Fragment verlassen und dann wieder gehen es ist es zu der recyclerView hinzugefügt. Meine addPost-Methode führt einen API-Aufruf durch, um ihn dann zur Datenbank hinzuzufügen. Wie würde ich es dem Adapter hinzufügen? – BilalMH

+0

In PostFragment onResume sollten Sie den Code hinzufügen, der die Posts aus der Datenbank holt und sie auf den Adapter setzen. Jedes Mal, wenn das Fragment onResume aufgerufen wird, wird Ihr Recyclerview auf den neuesten Stand aktualisiert. Eine andere Möglichkeit für die Kommunikation zwischen Ansichten ist die EventBus-Bibliothek, aber die Verwendung von Ereignissen für Dinge, die Sie über den Lebenszyklus der Ansicht ausführen können, ist eine übermäßige Verwendung der Bibliothek. –

0

Es gibt viele Möglichkeiten, dies zu tun, aber die effizienteste wäre Event-Bus. Hier ist ein Beispiel: https://github.com/greenrobot/EventBus
Ich schlage vor, Sie beginnen besser mit dem Erstellen Ihrer Anwendungen Event-Bus als Mittel der Kommunikation zwischen Aktivitäten, Fragmente und Event-Threads. Dies ist vielleicht nicht die Antwort, die Sie suchen, aber definitiv eine bessere Lösung.

Verwandte Themen