2016-12-14 6 views
0

ViewPager内のフラグメントのライフサイクルを知る必要がありますか? 私は3つのタブ(3つのフラグメント)のViewPagerを持っています それらの間をスワイプするライフサイクルは何ですか?ViewPagerフラグメントのデータを更新するには?

私は、フラグメント3からフラグメント1に移動すると、それがリフレッシュされていることに気付きました。ライフサイクルのどのメソッドがこの瞬間に呼び出されますか?

私はすべての方法の中にトーストを入れようとしましたが、彼らはお互いに後に呼ばれていることが分かりました。

私はそれがonActivityCreated()だと思いますが、それを呼び出すにはBundle saveInstancestateを渡す必要があります。 nullを渡すとクラッシュするので、このオブジェクトを取得する方法は?

このような方法があれば、共有してください。 目標は、アクションバーのボタンをクリックすると、フラグメント内のデータを更新することです。

ありがとうございます。

+0

ページャアダプタの 'getItem'メソッドは、フラグメントの新しいインスタンスを作成しますか? –

+0

それは何もしません – kerollos

+0

何も意味しませんか?ビューまたはフラグメント(おそらくあなたの場合はフラグメント)を返す必要があります。 –

答えて

1

ビューポケベルのフラグメントは、常にどちらかの側でそのネイバーをロードします。

これにより、フラグメントが表示される前に実行されたフラグメントの作成コールバックが表示されます。あなたがフラグメントから2ページ離れた後、それは破壊されます。

アクティビティにViewPager.OnPageChangeListenerを実装してから、onPageSelectedを使用してフラグメントにコールを取得します。そのアクティビティーのビュー・ページ・フラグメントへの参照を保持することができます。あなたは、ビューページャ用のアダプタを設定した後、あなたのコードを入れて、あなたの活動で

public class ReadyFragment extends Fragment implements ReadyInterface { 

    //.. your regular fragment stuff 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    ... 
    if (savedInstanceState != null) { 
     //Restore the fragment's state here 
    } 
} 
... 
@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    //Save the fragment's state here 
    } 

    @Overide 
    public void ready() { 
    // do your stuff here that needs to happen 
    //once fragment is displayed and running 
    } 

} 
+0

申し訳ありませんが、私はあなたのことを理解していません。 – kerollos

+0

答えは、フラグメントが実行中で表示されていることを確実に知る方法を説明しています。ページャを表示すると、破棄してフラグメントを連続的に作成します。 –

+0

フラグメント状態を保存して復元するためのものを追加しました –

0

public interface ReadyInterface { 
    public void ready(); 
} 

があなたの破片でそのインターフェイスを実装します。

public class ViewPagerActivity implements ViewPager.OnPageChangeListener { 

    public void onCreate(Bundle savedInstanceState) { 
     ... 
     if (savedInstanceState != null) { 
      //Restore the fragment's instance 
      mContent = getSupportFragmentManager().getFragment(savedInstanceState, "mContent"); 
      ... 
     } 
     ... 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 

     //Save the fragment's instance 
     getSupportFragmentManager().putFragment(outState, "mContent", mContent); 
    } 


    // regular activity stuff plus view pager methods 

    @Override 
    public void onPageSelected(int arg0) { 
     final ReadyFragment fragment = mAdapter.getItem(arg0); 
     if (fragment.isVisible()) { 
      fragment.ready(); //method inside your custom fragment code 
     } 
    } 
} 

は、インターフェイスクラスを追加します。 onPageSelected()メソッドの何でもviewPagerを変更またはスワイプするたびに呼び出されます。

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageSelected(int position) { 

      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 
関連する問題