0

Вот мой xml-код.Как прокручивать (x, y) в RecyclerView внутри NestedScrollView?

<android.support.v4.widget.NestedScrollView 
     android:id="@+id/nav_scroll" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

      <include layout="@layout/nav_header_main" /> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/nav_list" 
       android:layout_width="match_parent" 
       android:layout_height="@dimen/weight_based_height" 
       android:layout_weight="1" 
       android:nestedScrollingEnabled="false"/> 
     </LinearLayout> 

    </android.support.v4.widget.NestedScrollView> 

Я попытался

navigationScroll.scrollTo(0, 200); 
    navigationScroll.smoothScrollTo(0, 200); 
    navigationRecycler.scrollTo(0, 200); 
    navigationRecycler.smoothScrollTo(0, 200) 

и ни один из них не работает. Ничего не происходит, никакого свитка вообще, нада.

Но что интересно, когда я делаю это

navigationScroll.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { 
     @Override 
     public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { 
      if (scrollY == 0) { 
       navigationScroll.scrollTo(0, 150); 
      } 
     } 
    }); 

В navigationScroll.scrollTo(0, 150); работает. Как вы, ребята, думаете, что я могу заставить его работать, не помещая его в слушателя?

EDIT: ОК, мой NestedScrollView был внутри моего DrawerLayout. Я получил метод scrollTo() для работы, как только я положил его внутри onDrawerOpened вот так.

toggle = new ActionBarDrawerToggle(
     this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close){ 
     @Override 
     public void onDrawerClosed(View drawerView) { 
      super.onDrawerClosed(drawerView); 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      // Scroll to current item 
      navigationScroll.smoothScrollTo(0,200); 
     } 

    }; 
    drawer.setDrawerListener(toggle); 

ответ

0

Куда вы поместили эти методы (т. Е. В какой метод жизненного цикла Activity/Fragment)? Возможно, вы вызываете эти методы до того, как представление действительно будет отображаться. В этом случае вы должны поместить их в другой метод жизненного цикла или отложить их с помощью post(Runnable r).

+0

В итоге я понял, но спасибо за ввод! – Isaiah

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