【问题标题】:Activity and visible Fragment not logging properly活动和可见片段未正确记录
【发布时间】:2017-10-31 02:51:19
【问题描述】:

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

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

当我加载我的应用程序时,它会自动显示“tab1”和“tab2”会立即被记录。这让我很困惑,因为我不知道为什么会调用“tab2”,因为“tab1”是屏幕上唯一可见的片段。另外,为什么不记录“tab3”呢?当我向右滚动一次(到“tab2”)时,“tab3”被记录下来。当我滚动到“tab3”时,没有任何记录。当我回到“tab2”时,“tab1”被记录下来......在片段之间来回移动,我再也看不到“tab2”再次出现在我的 logcat 中。此外,似乎我实际使用的任何 Fragment 都会调用相应的 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;
}

这是我的日志:

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

【问题讨论】:

    标签: java android android-fragments android-fragmentactivity


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      尝试覆盖你的片段中的方法

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多