2015-07-15 4 views
2

У меня есть 3 Фрагменты внутри a ViewPager. Для каждого Fragment я установил другой цвет NavigationBar (программно). Это код.Фрагменты внутри ViewPager issue

@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, и я вижу GREEN NavigationBar и «2». Зачем? Как я могу решить?

ответ

3

Это происходит потому, что ViewPager загружает уже следующий фрагмент, поэтому, если вы на фрагменте один, фрагмент 2 уже создан, если вы проведете фрагмент 2, будет создан фрагмент 3. Вот почему чистка гладкая.

Todo то, что вы хотите, вам нужно добавить 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) { 

     } 
    }); 

и так далее.

+0

Да. Это работает, спасибо большое. –

Смежные вопросы