2017-01-20 6 views
0

各フラグメントが10のフラグメントを持つtablayoutとviewpgaerを持っていて、各フラグメントがAPIにリクエストを送信し、結果が各フラグメントのリサイクラービューに表示されます。ユーザーは投稿を作成してサーバーに追加することができます。投稿を追加すると、投稿されたそれぞれのカテゴリに戻ってきます。ここで、フラグメントをリフレッシュして、リサイクラビューを更新して新しいエントリを表示する必要があります。以下のコードが実行されるように、ブロードキャストは、ユーザーが成功した後の時にフラグメントに送信されます。タブを変更せずにフラグメント内のリサイクラービューをリフレッシュする方法

BroadcastReceiver broadRefresh = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     System.out.println("recd broadcast mainact" + intent.getStringExtra("refresh")); 
     if (intent.getStringExtra("refresh") != null) { 

      getFragmentManager() 
        .beginTransaction() 
        .detach(CarsFragment.this) 
        .attach(CarsFragment.this) 
        .commit(); 
     } 
    } 
}; 

再び呼び出されますが、リサイクルビューが更新されていないoncreateviewとonviewcreatedフラグメント。 AdsList arraylistをクリアして、データloadnormalRv()を取得するためのメソッドを再度呼び出すことを試みました。この場合、ページが空白になり、タブを変更してからこのタブに戻り、データが表示されたリサイクルビューが表示されます。いくつかのボタンは、このページにfitlerまたはソートのようなデータが表示されます。

ここに完全なフラグメントコードlinkがあります。 助けてください。ありがとう。

+0

あなたはrecyclerViewを更新する必要がある場合は、(アダプタに新しいデータセットを渡した後に) 'notifyDataSetChanged()'を呼び出すことができます。なぜあなたは同じフラグメントを切り離して貼り付ける必要があるのか​​分かりません。 –

+0

@AhmedAbidi arraylistには既にアイテムがあります。データを再取得すると.addメソッドは最後にアイテムを追加しますが、アイテムは時系列順に表示する必要があります、最新の最初のように、APIは正しい順序でアイテムを送信していますが、arraylistではアイテムが最後に追加されるため、フラグメントが再び作成されると、arraylistが再初期化され、 arrylistをクリアしてみたところ – Ghanendra

+0

アダプタから配列全体を置き換えて、@AhmedAbidiと同じようにnotifyDataSetChanged()を使ってください – AmirG

答えて

0

あなたが最後のアイテムは、最初のあなたが追加することができますしたい場合:全体のリサイクルビュー「を再描画」します

  • notifyDataSetChanged()

    mLayoutManager.setReverseLayout(true); 
    mLayoutManager.setStackFromEnd(true); 
    

    をお使いのリサイクルビューをリフレッシュするために次の2つのオプションを持っています(すべてのアイテムのすべてのアニメーションが再開されます)

  • notifyItemChanged(int position)を使用して特定の位置のアイテムのみを更新します。そうすれば効率的なリフレッシュを行うことができます。
関連する問題