2016-12-28 15 views
0

フラグメントにRecyclerViewがあり、最初は非表示です。ユーザーがボタンをクリックすると、RecyclerViewの可視性がtrueに設定され、ArrayListにあるデータが表示されます。フラグメントを復元するときにRecyclerViewが空です。

別のフラグメントを上に移動すると問題が発生します(前のフラグメントをbackStackにRecyclerViewで追加します)。新しいフラグメントから戻ると、前のフラグメント(RecyclerViewのもの)が表示され、 onCreateView()私は、recyclerViewに使用しているデータセットの値を記録しますが、すべてがありますが、recyclerViewは空です(フッター項目のみが表示されます)。私たちはRecyclerViewNextFragment backstackに到達したスキーマがある葉断片とRvFragmentフラグメントを呼び出した場合

@Nullable 
@Override 
public View onCreateView(final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_photo_comments, container, false); 
    ButterKnife.bind(this, view); 

    Timber.i("onCreateView data.size == %d", commentArrayList.size()); 

    setToolbarTitle(); 

    Picasso.with(getActivity()) 
      .load(photo) 
      .placeholder(R.drawable.ic_timeline_image_placeholder) 
      .centerCrop() 
      .fit() 
      .into(ivPhoto); 

    if (hasCommentsVisible) { 
     Timber.i("comments are visible!! and dataSize == %d", commentArrayList.size()); 
     llFlagsCommentsContainer.setVisibility(View.GONE); 
     rvCommentsList.setVisibility(View.VISIBLE); 
    } 

    tvComments.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      hasCommentsVisible = true; 
      llFlagsCommentsContainer.setVisibility(View.GONE); 
      rvCommentsList.setVisibility(View.VISIBLE); 
     } 
    }); 

    initRecyclerView(); 

    return view; 
} 

:ここ

         (back pressed) 
RvFragment ----------> NextFragment ------------> RvFragment 

とはonCreateView()からのコードです上記のコードのログステートメントで、データが存在することを確認できます。ありがとう!

+0

いつ、どのように 'commentArrayListを移入します:

また、完全にあなたがそれに戻ってくるたびに、あなたのフラグメントを再作成するために、あなたは単にそれを完全に削除することができます'? –

+0

'onCreate()'の中で 'Retrofit'呼び出しを開始し、メソッド内のデータを受け取ります:' @Override public void showData(Comment comment){ commentArrayList.add(comment); adapter.addItem(コメント); adapter.notifyDataSetChanged(); } ' – Mes

答えて

0

フラグメントスタックを設定する方法はわかりませんが、フラグメントがまだスタックに残っている場合は、[戻る]ボタンを押してもonCreateViewは再度呼び出されません。

https://developer.android.com/training/basics/fragments/fragment-ui.html#Replace

transaction.replace(R.id.fragment_container, newFragment); 
transaction.addToBackStack(null); 

のみONSTART()になります。

あなたはonCreateViewが再び呼ばれるようにしたい場合は、あなたがaddToBackStack(なし

FragmentTransaction.replace(NextFragment) 

を使用する必要があります)が、それは全体のフラグメントが最初から再作成されることを意味します。おそらくあなたが望むものではないでしょう。特に、Webサービスからデータを取得している場合。

FragmentTransaction.remove(RvFragment) 

をしてから押して、あなたの次のフラグメント

+0

申し訳ありませんが、私はFragmentsをバックスタックに保存するために[FragNav](https://github.com/ncapdevi/FragNav)という名前のライブラリを使用しています。実際には、ビューのみが破棄され、インスタンス変数が永続的に保持されます(そして、それがログを見ることができ、commentsArrayListが空ではないことがわかります) – Mes

関連する問題