ViewPager 问题中的片段
Posted
技术标签:
【中文标题】ViewPager 问题中的片段【英文标题】:Fragments inside ViewPager issue 【发布时间】:2015-10-04 02:10:20 【问题描述】:ViewPager
中有 3 个片段。对于每个Fragment
,我设置了不同的NavigationBar
颜色(以编程方式)。这是代码。
@Override
public void init(Bundle arg0)
// TODO Auto-generated method stub
addSlide(new Fragment1());
addSlide(new Fragment2());
addSlide(new Fragment3());
private class Fragment1 extends Fragment
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
getWindow().setNavigationBarColor(Color.parseColor(BLUE));
Log.e("test", "1");
return inflater.inflate(R.layout.layout_intro, container, false);
private class Fragment2 extends Fragment
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
getWindow().setNavigationBarColor(Color.parseColor(RED));
Log.e("test", "2");
return inflater.inflate(R.layout.layout_intro_2, container, false);
private class Fragment3 extends Fragment
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
getWindow().setNavigationBarColor(Color.parseColor(GREEN));
Log.e("test", "3");
return inflater.inflate(R.layout.layout_intro_3, container, false);
在Logcat
中,我看到了错误的数字。例如,我在第一个 Fragment
中,我看到绿色 NavigationBar
和“2”。为什么?我该如何解决?
【问题讨论】:
【参考方案1】:发生这种情况是因为ViewPager
已经加载了下一个片段,因此如果您在片段一上,则片段 2 已经创建,如果您滑动到片段 2,将创建片段 3。这就是滑动流畅的原因。
您需要将 onPageChangeListener 添加到您的ViewPager
中,如下所示:
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
@Override
public void onPageSelected(int position)
switch(position)
case 1: if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
getWindow().setNavigationBarColor(Color.parseColor(BLUE));
break;
case 2: if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
getWindow().setNavigationBarColor(Color.parseColor(RED));
break;
case 3: if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
getWindow().setNavigationBarColor(Color.parseColor(GREEN));
break;
@Override
public void onPageScrolled(int position, float offset, int offsetPixel)
@Override
public void onPageScrollStateChanged(int state)
);
等等。
【讨论】:
以上是关于ViewPager 问题中的片段的主要内容,如果未能解决你的问题,请参考以下文章