0

YouTubeはタブのフラグメントのライフサイクルをどのように処理しますか?タブをタップすると、タブが切り替わってもデータのロードが開始されます。そして、そのタブをもう一度選択し直すと、ビューとデータがリロードされません。 didFeedLoadのようないくつかのブール変数があると思いますが、それはonCreateでtrueに設定されますか?しかし、私の意見では、これはエレガントで良い解決策ではありません。どう思いますか?私はBottomNavigationViewを持っていますが、私はここでのYouTubeのAndroidアプリの中YouTubeアプリのようにアンドロイドライフサイクルを処理するにはどうすればいいですか?

などのライフサイクルを処理する代わりに、ViewPagerとTabLayoutの私のアプリで

は、ナビゲーションのコードです:

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.replace(R.id.frame_layout, new OneFragment()); 
fragmentTransaction.commit(); 
BottomNavigationView bottomNavigationView = 
      (BottomNavigationView) findViewById(R.id.bottom_navigation_view); 

bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { 
    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
      Fragment fragment = null; 
      switch (item.getItemId()) { 
       case R.id.action_one: 
        fragment = new OneFragment(); 
        break; 
       case R.id.action_two: 
        fragment = new TwoFragment(); 
        break; 
       case R.id.action_three: 
        fragment = new ThreeFragment(); 
        break; 
       case R.id.action_four: 
        fragment = new FourFragment(); 
        break; 
       case R.id.action_five: 
        fragment = new FiveFragment(); 
        break; 
      } 
      if (fragment != null) { 
       FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
       fragmentTransaction.replace(R.id.frame_layout, fragment); 
       fragmentTransaction.commit(); 
      } 
      return true; 
     } 
    }); 
+0

ナビゲーションビューとタブ選択のコードを共有してください。だから私は提案することができます –

+0

@UmarAta私は質問を更新しました – madim

答えて

0

私はYouTubeのタブの疑い断片は正常な断片である。タブを切り替えると、それらは(おそらくは)殺される可能性があります。バックグラウンドでデータをロードして(メインのアクティビティ/別のスレッドで)、そのデータをローカルにキャッシュ/ストアするので、同じタブに再び切り替えると、保存/キャッシュされたデータを使用して非常に迅速に再描画されます。 Android Support Library (v4) Documentationからあなたが探しているもの

0

さViewPager .setOffscreenPageLimit(int型の制限)

は のいずれかの側に保持すべきページ数を設定します。アイドル状態のビュー階層内の現在のページ。この を超えるページは、必要に応じてアダプタから再作成されます。

デフォルト値:1

あなたは4タブを持っている、とあなたはそれらすべてがアイドル状態のままにしたいと(YouTubeのアプリのように)再作成&を破壊したことがない場合は、あなたが設定することもできます制限はです。ケース・シナリオ(4つのタブ)としてのYouTubeアプリを取る

、私はそのViewPagerは、多かれ少なかれ、このように定義されていたと信じている:

ViewPager mViewPager = (ViewPager) findViewById(R.id.pager); 
mViewPager.setOffscreenPageLimit(3); 

編集: BottomNavigationViewについて - 限り、あなたのようにそれをViewPagerにリンクします。これを使用するかTabLayoutを使用するかは関係ありません。しかし、2度目の読書後、私はViewPagerをまったく使用していないことを理解していますので、私の援助が完了できるようにあなたが何を使用しているか知りたいのですが

(さらに、ViewPagerを使用しない理由

+0

私はスワイプの振る舞いを望まないし、私はまた、他のタブのデータをロードしたくありません。私が欲しいのは、タブが選択され、表示されているときにapiリクエストを一度行い、他のタブのデータをロードしないことです。ユーザーが他のタブを選択し、以前のタブストップ作成要求に対してデータがロードされていない場合、そのタブを再度選択し直すと、フラグメントはデータがそのタブ用にロードされているかどうかを知る必要があります。 – madim

+0

ViewPagerでスワイプの動作をキャンセルするには、独自のリンクを作成します(下のリンクをご覧ください)。 他のタブのデータ読み込みについて - を上書きすることができます。あなたのフラグメント内のsetUserVisibleHintは、フラグメントの可視性が変更されたときに発生します(下のリンク番号2)。 これを使用して、以前のタブリクエストも停止することができます。 http://stackoverflow.com/questions/9650265/how-do-disable-paging-by-swiping-with-finger-in-viewpager-but-still-beable-to-s http:///stackoverflow.com/questions/36353560/stop-android-tablayout-loading-next-page-automatically – Barackos

関連する問題