立即了解活动和碎片。我创建了一个超级简单的应用程序,记录了片段显示的内容以及我看过它的次数。这就是事情变得怪异......
我的理解是,如果一个特定的片段是可见的,那么它自己的logcat应该出现在片段中。但情况并非如此,它似乎记录了其他片段的logcat或者根本没有记录。
当我加载我的应用时,会自动显示" tab1"和" tab2"立即登录。这让我感到困惑,因为我不知道为什么" tab2"将被称为" tab1"是屏幕上唯一可见的片段。另外,为什么没有" tab3"记得呢?当我向右滚动一次(到" tab2")," tab3"得到记录。当我滚动到" tab3"时,没有任何记录。当我回到" tab2"," tab1"得到记录......在碎片之间来回走动,我从未见过" tab2"再次出现在我的logcat中。此外,它看起来像我实际上的片段,它的各个logcat被调用。
任何帮助解释这一点将不胜感激!
这是我的主要活动:
@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);
}
}
这是我的片段1:
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;
}
这是我的片段3:
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
答案 0 :(得分:3)
ViewPager
组件默认创建屏幕上显示的Fragment
和相邻的组件。
这是一种优化,您可以使用方法setOffscreenPageLimit (int limit)
更改该行为。 Reference
答案 1 :(得分:0)
尝试覆盖你的frgament中的方法
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser){
}
else if (!isVisibleToUser){
Log.d("TAG","Fragment not Visible ");
}
}