如何刷新ViewPager片段中的数据?

时间:2016-12-14 23:20:39

标签: android android-fragments android-viewpager

我需要了解ViewPager中Fragment的生命周期吗? 我有一个3个标签的ViewPager(3个碎片) 在它们之间滑动时的生命周期是什么?

我注意到当我从Fragment 3转到Fragment 1时,它正在刷新。那么在这个时刻召唤生命周期中的哪种方法?

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

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

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

由于

2 个答案:

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

} 

答案 1 :(得分:0)

在您的活动中,为视图寻呼机设置适配器后,将您的代码放在onPageSelected()方法中。每次更改或滑动viewPager时都会调用它。

heightForFooterInSection