Android Fragment onResume

时间:2014-04-15 16:11:19

标签: android fragmentpageradapter

我看过一些类似于我的问题的帖子,最相似的问题在这里:Strange onPause(), onResume() behaviour in fragments

我正在使用FragmentPagerAdapter创建标签片段。 我有3个片段A,B和C.

  • 当应用程序启动时,我看到片段A和B onCreateView() 调用。
  • 当我改为制表符B时,我看到片段C onCreateView()调用。
  • 当我换成标签C时,没有任何事情发生。
  • 当我改回标签B时,我将片段A onCreateView保存为。
  • 我从未见过onCreateView()调用的片段B.

这是我的FragmentPagerAdapter实现:

public class TabsPagerAdapter extends FragmentPagerAdapter {

private static final int TOTAL_TABS = 3;

public TabsPagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int index) {

    switch (index) {
        case 0:
            // Top Rated fragment activity
            return new ImageFragment();
        case 1:
            // Games fragment activity
            return new CameraFragment();
        case 2:
            // Movies fragment activity
            return new WebFragment();
    }

    return null;
}

@Override
public int getCount() {
    // get item count - equal to number of tabs
    return TOTAL_TABS;
}

@Override
public int getItemPosition(Object object) {
    return super.getItemPosition(object);
}

}

我希望有人能帮我解释一下我片段的行为

3 个答案:

答案 0 :(得分:1)

  
      
  • 当应用程序启动时,我看到片段A和B onCreateView()调用。
  •   

ViewPagerAdapter的用途是,它将始终实例化当前可见的项目旁边的项目。

当您启动App时,适配器将创建A和B.B将始终只有3个选项卡可用。

  • 目前在标签A上: [A] [B]被实例化
  • 目前在标签B上: [A] [B] [C]实例化
  • 目前在标签B上:  [B] [C]被实例化

答案 1 :(得分:1)

TabView-切换选项卡后,第一次就不会调用onResume,那么您必须使用setUserVisibleHint来执行更新/刷新之类的操作

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
}

答案 2 :(得分:0)

我想您正在使用Action Bar,您所描述的是适配器的正常行为:当需要显示片段时,列表中的下一个片段将被预加载(默认情况下,但您可以改变这个)。 所以一开始你需要A,所以它只会加载B,因为左边没有任何东西' A,当你切换到B时,只有C片段会被预加载,因为A已经存在,最后当你去C时,适配器不需要预加载任何东西,因为什么都没有&# 39;在右边' C和它已经有B。

希望它有所帮助。