2017-05-08 7 views
0

私はInstagramのようにアプリケーションを作成するためにアンドロイドのBottomNavigationViewを使用しています。私はナビゲーションタブでフラグメントを使用しています。アプリケーションには5つのタブが初期設定されています。中間タブをアクティブなタブとして設定し、アプリの起動後に読み込みます。他のタブをクリックすると、ネットワークコールが行われ、データがロードされます。今、私は戻るボタンを押すか、最後のタブ(スタートアップ時にロードされた)をもう一度クリックすると、フラグメントが再作成され、同じデータをロードするためのネットワーク呼び出しが行われます。以前のフラグメントを再作成せずに同じデータで表示したい。下部のナビゲーションタブがクリックされるたびに、フラグメントが再作成されないようにします。

私は

transaction.add(container,fragment);

が、無駄に使ってみました。タブの

私のコードは、私が取り外して交換使用するのと同じです追加使用して知っている

if (item.getItemId() == R.id.nav_OverView && _current != R.id.nav_OverView) { 
     Overview _overView = new Overview(); 
    _fragmentTransaction.hide(_currentFragment); 
    _fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); 
    _fragmentTransaction.add(R.id.content_base_drawer, _overView); 
    _fragmentTransaction.commit(); 
    _current = R.id.nav_OverView; 
     viewIsAtHome = true; 
    } 

クリックしてください。

何か助けていただければ幸いです。

+0

この[リンク](http://stackoverflow.com/questions/14354885/android-fragments-backstack)を参照してください。または、これがうまく動作しない場合は、シングルトンクラスを使用して最初のロード時にデータを保存し、その後に使用します。 – ADM

+0

'setOnNavigationItemSelectedListener'コードを投稿すると、おそらくあなたのフラグメントが作成されています – marmor

+0

@marmor updated ...今すぐチェック – Joe

答えて

0

は、(代わりに、ローカル変数の)クラスのフィールドに_overviewを作成し、これにあなたのリスナーのコードを変更:

また、これはFragment already addedエラーを防止し、代わりにhide + addreplaceを使用しています。

コンテナに追加された既存のフラグメントを置き換えます。これは、ここで与えられた同じ引数で 追加断片すべて現在に同じcontainerViewIdしながら加えた、その後 アドオン(int型、フラグメント、String)をのremove(フラグメント)を呼び出すと本質的に同じ です。

する例を参照してください:ビューがないかどうかをチェックすることができます

if (item.getItemId() == R.id.nav_OverView && _current != R.id.nav_OverView) { 
     if (_overView == null) { 
      _overView = new Overview(); 
     } 
    _fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); 
    _fragmentTransaction.replace(R.id.content_base_drawer, _overView); 
    _fragmentTransaction.commit(); 
    _current = R.id.nav_OverView; 
    viewIsAtHome = true; 
} 
+0

フラグメントが既に追加されました:fragmentName ..前のフラグメントに戻るときにこのエラーが発生します。良い点は、クラスフィールドについて指摘していますが、私はそれを完全に欠いていました。 – Joe

+0

ええ、フラグメントを再追加する代わりに、それを隠すものを削除する必要があります – marmor

+0

どのくらい正確に?編集してください。あなたの助けに感謝。フラグメントが既にロードされているか、最初に実行されたかどうかをチェックする方法は?それが既にロードされている場合、最後のフラグメントを非表示にすると、2番目の最後のフラグメントがポップアップします。必要ならば必要ではなく、1 2 3 4 5を開き、次に2を5で非表示にします。最後の一つ? – Joe

0

ビューを作成する前に、以下のコードでは、フラグメントは、問題を再作成するのに役立ちます。

View view; 

@Override 

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
{ 

if (view == null) 

{ 

     view = inflater.inflate(R.layout.frag_layout, container, false); 
     init(view); 
    } 

    return view; 
} 
関連する問題