0

내 XML 코드는 다음과 같습니다.NestedScrollView 내부의 RecyclerView에서 scrollTo (x, y)하는 방법은 무엇입니까?

<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); 작업을 수행 할 때. 어떻게 청중에 넣지 않고도 작동시킬 수 있다고 생각합니까?

편집 : 오케이, 내 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
당신이 그 방법을 넣어 않았다

(즉, 어떤 활동/조각 수명주기 방법)? 뷰가 실제로 렌더링되기 전에 이러한 메서드를 호출 할 가능성이 있습니다. 이 경우 다른 수명주기 방법으로 넣거나 post(Runnable r)으로 연기해야합니다.

+0

결국에는 알아 냈지만 입력 해 주셔서 감사합니다! – Isaiah