0

希望你能對此提供幫助。發佈評論時更新Recyclerview

我有一個PostFragment其中包含RecyclerView一個線程的所有職位。這個想法是讓用戶點擊FAB,然後將它們帶到NewPostActivity,這允許他們回覆。我如何在PostFragment中更新適配器,因爲我在NewPostActivity中按「發佈」。

目前我已經在片段中嘗試過onResume,但它不起作用。這是我點擊「發佈」按鈕時的代碼。

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(); 

       } 
      }); 
} 

而且我onResume基本上只是

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

我試圖在這裏讀書了,但真的不能找到適合這樣的東西。

在此先感謝。

+0

發佈的數據是否插入到PostFragment中的同一個列表中? –

+0

是@ReazMurshed – BilalMH

+0

請分享如何設置適配器和列表的代碼。我沒有看到列表更新了新的數據。 'onPostDataReceived'沒有更新任何列表 –

回答

1

還有就是要建立在你的活動靜態方法將執行此操作的選項:

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

然後finish()之前調用它的PostFeedDataFactoryCallback()兩種方法。

另外,如果您將第二類作爲活動啓動,則始終可以將其啓動爲startActivityForResult(),然後執行方法onActivityResult(),通知適配器進行更改。在這種情況下,你每次完成前添加()是這樣的:

setResult(Activity.RESULT_OK, your_data); 

看看這裏的一個例子: https://tylenoly.wordpress.com/2010/10/27/how-to-finish-activity-with-results/

+0

mAdapter是在不同的類,我怎麼能這樣做? – BilalMH

+0

對不起,現在通讀它 –

+0

這仍然讓我困惑,這是我從未真正做過的一點,也無法讓我的腦袋圍繞它 – BilalMH

0

我也不在你添加新的郵政代碼的部分看在適配器中。 你必須setItems,然後調用notifyDatasetChanged有任何效果。

如果PostFragment在ActivityA中與NewPostActivity不同,那麼您可以使用PostFragment生命週期通過檢索所有帖子作爲最簡單(不是更高效)的解決方案來刷新適配器。

+0

但是,如果我離開片段然後再回到它被添加到recyclerView。我的addPost方法進行API調用,然後將其添加到數據庫中。那麼我如何將它添加到適配器? – BilalMH

+0

在PostFragment onResume中,您應該添加從數據庫中檢索帖子的代碼並將其設置爲適配器。所以每次調用片段onResume時,您的recyclerview都會刷新到最新狀態。 在視圖之間進行通信的另一種方式是EventBus庫,但是通過視圖的生命週期使用事件來處理事情是過度使用庫。 –

0

有很多方法可以做到這一點,但最有效的將是事件總線。下面是一個例子:https://github.com/greenrobot/EventBus
我建議你最好使用事件總線作爲活動,片段和事件線程之間的通信方式來構建應用程序。這可能不是你正在尋找的答案,但絕對是一個更好的解決方案。