2016-11-15 77 views
0

我有一個包含viewpager(位於佈局頂部)和一個列表視圖(位於尋呼機下方)的佈局,我正在使用每3秒移動一個新頁面Runnable類,問題是每當尋呼機移動到newpage佈局向上滾動,以便我可以看到尋呼機。我想阻止滾動並保持位置,無論我在哪裏。查看尋呼機移動到新頁面時佈局向上滾動

pageAdapter = new PagerAdapterCustom(getSupportFragmentManager(), 
       getApplicationContext(), pics, true, false); 
     pager.setAdapter(pageAdapter); 
     mIndicator = (CirclePageIndicator) findViewById(R.id.indicatorDetailsNews); 

     mIndicator.setViewPager(pager); 
     pager.setOnPageChangeListener(new OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int arg0) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) { 
       // TODO Auto-generated method stub 
       currentPage = arg0; 
       //mIndicator.setCurrentItem(arg0); 
      } 

      @Override 
      public void onPageScrollStateChanged(int arg0) { 
       // TODO Auto-generated method stub 
       //mIndicator.setCurrentItem(arg0); 
      } 
     }); 

     final Handler handler = new Handler(); 

     final Runnable Update = new Runnable() { 

      public void run() { 
       if (currentPage == NUM_PAGES - 1) { 
        currentPage = -1; 
       } 
       pager.setCurrentItem(currentPage++, true); 
       mIndicator.setCurrentItem(currentPage++); 
       pager.setScrollBarFadeDuration(R.styleable.CirclePageIndicator_fillColor); 
       // pager.setScrollDurationFactor(4); 
      } 
     }; 

     swipeTimer = new Timer(); 
     swipeTimer.schedule(new TimerTask() { 

      @Override 
      public void run() { 
       handler.post(Update); 
      } 
     }, 1000, 3000); 

回答

1

克諾索斯的回答是這樣的,你應該從你的容器的活動管理這個,

讓您使用的是RecyclerView,當你發現你的RecyclerView滾動假設,提醒你的活動,你可以這樣做如:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 

      scrolledValue = dy; 

     } 
    }); 

並將scrolledValue發回給ContainerActivity。 ContanierActivity然後會通知所有其他碎片有關更改,並通過滾動值來滾動它們的RecyclerViews,無論它是正值還是負值。

爲此,我認爲你可以使用smoothScrollBy(int dx,int dy),但我還沒有嘗試過。請參閱documentation

0

的問題是,你的PagerAdapterCustom裏面的Fragment有沒有它的兄弟Fragment S的滾動狀態的想法。

所以,當你滾動一個,其他人當然仍然在頂部。

要解決這個問題,你需要做兩件事。

  1. Fragment檢測裏面滾動,你報告滾動回PagerAdapterCustom的所有者。
  2. 當您切換到新的Fragment時,您將當前的滾動狀態報告給新的Fragment