Activity 可见片段未正确记录

Activity and visible Fragment not logging properly

立即了解 Activity 和 Fragment。我创建了一个超级简单的应用程序,用于记录正在显示的 Fragment 以及我看到它的次数。这就是事情变得奇怪的地方......

我的理解是,如果一个特定的 Fragment 是可见的,那么它自己的 logcat 我在那个 Fragment 中应该出现。但事实并非如此,它似乎记录了其他Fragment的logcat或什么都没有。

当我加载我的应用程序时,它会自动显示 "tab1" 和 "tab2" 立即被记录。这让我感到困惑,因为我不知道为什么 "tab2" 会被调用,因为 "tab1" 是屏幕上唯一可见的片段。另外,为什么 "tab3" 没有被记录下来?当我向右滚动一次(到 "tab2")时,"tab3" 被记录。当我滚动到 "tab3" 时,没有任何记录。当我返回 "tab2" 时,"tab1" 被记录...在片段之间来回切换,我再也没有看到 "tab2" 出现在我的 logcat 中。此外,似乎无论我实际在哪个片段上,都会调用相应的 logcat 。

如果能帮助解释这一点,我们将不胜感激!

这是我的 MainActivity:

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mSectionsPageAdapter = new SectionsPageAdapater(getSupportFragmentManager());
    mViewPager = (ViewPager) findViewById(R.id.viewContainer);

    mViewPager.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) {

        }
    });

    setupViewPager(mViewPager);
}

private void setupViewPager(ViewPager viewPager) {
    SectionsPageAdapater adapter = new SectionsPageAdapater(getSupportFragmentManager());
    adapter.addFragment(new Tab1(), "TAB1");
    adapter.addFragment(new Tab2(), "TAB1");
    adapter.addFragment(new Tab3(), "TAB1");
    viewPager.setAdapter(adapter);
}

}

这是我的 Fragment1:

int number = 0;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_tab1,container,false);

    number ++;
    Log.i("tab 1", "number: " + number);

    return view;
}

这是我的 Fragment2:

int number = 0;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_tab2,container,false);

    number ++;
    Log.i("tab 2", "number: " + number);

    return view;
}

这是我的 Fragment3:

int number = 0;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_tab3,container,false);

    number ++;
    Log.i("tab 3", "number: " + number);

    return view;
}

这是我的 logcat:

I/tab 1: number: 1
I/tab 2: number: 1
I/tab 3: number: 1
I/tab 1: number: 2
I/tab 3: number: 2
I/tab 1: number: 3
I/tab 3: number: 3
I/tab 3: number: 4
I/tab 3: number: 5
I/tab 1: number: 4
I/tab 3: number: 6
I/tab 1: number: 5
I/tab 3: number: 7

ViewPager 组件默认创建显示在屏幕上的 Fragment 和相邻的

这是一种优化,您可以使用方法 setOffscreenPageLimit (int limit) 更改该行为。 Reference

尝试覆盖你的代码中的方法

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser){
    }
    else if (!isVisibleToUser){
        Log.d("TAG","Fragment not Visible ");
    }
}