2016-12-14 30 views
0

我需要知道ViewPager中片段的生命周期? 我有3个选项卡ViewPager(3片段) 他们之间滑动时的生命周期是什么?如何刷新ViewPager碎片中的数据?

我注意到,当我从片段3到片段1时,它正在刷新。那么在这个时刻哪个方法在生命周期中被称为?

我试图在每种方法中都放上吐司,但是我发现它们是互相调用的,所以我不知道哪一个是负责刷新的。

我想这是onActivityCreated(),但要调用它,我必须通过Bundle saveInstancestate。当我通过null它崩溃,那么如何获得这个对象?

如果还有其他更好的方法,请分享。 目标是当我点击操作栏上的按钮时刷新片段中的数据。

谢谢

+0

Pager适配器的'getItem'方法是否创建片段的新实例? –

+0

它什么都不做 – kerollos

+0

你什么意思不做什么?它必须返回一个视图或片段(可能是您的案例中的片段)。 –

回答

1

视图寻呼机片段始终加载其邻居在任何一方。

正因为如此,您将看到碎片在可见之前运行的创建回调。离开一个碎片2页后,它将被销毁。

让您的活动执行ViewPager.OnPageChangeListener然后使用onPageSelected将呼叫转入您的片段。您可以在该活动中保留对视图页片段的引用。

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 
     } 
    } 
} 

添加一个接口类:

public interface ReadyInterface { 
    public void ready(); 
} 

实现该接口在您的片段:

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

在您的活动,您可以设置视图寻呼机适配器后,把你的代码无论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) { 

      } 
     });