我开发了一个应用程序,它有三个选项卡和一个显示这些布局的活动。总共我有3个片段。
我学习了许多教程并使用它们。 我有三个片段,每个片段都有一行
return inflater.inflate(R.layout.tab_fragment_*, container, false);
* 1或2或3根据哪个片段。
我在这一行上设置了一个断点,但我看到了一些我无法理解的事情。
当我在调试模式下选择tab1时,我的调试器会在tab2的片段中找到代码! 然后它命中tab1片段中的代码,然后显示正确的结果。当我选择tab2时,debuger命中片段中的代码为tab3 !!!!然后它显示正确的结果。当我选择tab3时,我的调试器没有达到任何断点但显示正确的结果。
请帮帮我。
我看到正确的事情,但我无法理解。通过这种行为,我无法在每个选项卡上按下按钮添加一些操作(在这种情况下是片段)。
我的一个参考是: http://www.truiton.com/2015/06/android-tabs-example-fragments-viewpager/
我也使用过Android 2.2 API。
答案 0 :(得分:0)
默认情况下,ViewPager仅创建当前页面以及当前页面左侧和右侧的屏幕外页面。
(见http://www.androidzeitgeist.com/2012/10/examining-viewpager-2.html)
当你点击tab1时,会创建fragment1(立即显示给用户),所以是fragment2(随时可以在屏幕上滚动)。单击tab2时,fragment2已经存在(参见上一步)并立即显示,创建了fragment3(准备在屏幕上滚动)。
你可能想尝试将set the offscreen page limit设为零,因此(理论上)每个片段只有在它出现在屏幕上时才会创建,但它不会起作用。屏幕外页面限制的最低值可以是1.
如果您在选中标签时需要对标签执行某些操作,则可以尝试以下操作:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override public void onPageSelected(int position) {
Fragment selectedFragment = fragments.get(position));
//do something here
}
@Override public void onPageScrollStateChanged(int state) {
}
});