2016-10-05 2 views
2

LinearSnapHelper을 사용하여 사용자가 스크롤 할 때 항목을 스냅하는 리사이클 러 뷰가 있습니다. 이제 스냅을 듣고 싶습니다. 스냅 된 항목의 색인을 얻는 것이 좋습니다. 그러나, 나는 그것을 할 방법이 있는지 정말로 알 수 없다.리사이클 러 뷰를 찍은 항목을 찾는 방법은 무엇입니까?

처음에는 LinearSnapHelperfindTargetSnapPosition()이 인덱스를 스냅으로 반환한다고 생각했지만 (사실은 그렇지 않습니다). 첫 번째 항목에 대해 무작위로 -1 또는 0을 반환하고 목록이 스크롤되면 임의로 호출됩니다. 때로는 메서드가 전혀 호출되지 않습니다. 때로는 색인이 잘못되어 때로는 올바른 것입니다. 이것을 사용하여 색인을 찾는 것은 아무 소용이없는 것 같습니다.

그래서 : 리사이틀 뷰에서 어떤 항목을 찾았는지 어떻게 알 수 있습니까?

답변

6

나는이 작업을 할 수있었습니다. 최선의 해결책인지 확실하지 않지만 여기에 내가 한 일이 있습니다.

private int selectedPosition = -1; 
private LinearLayoutManager layoutManager; 
private RecyclerView recyclerView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    ... 

    LinearSnapHelper snapHelper = new LinearSnapHelper() { 
     @Override 
     public View findSnapView(RecyclerView.LayoutManager layoutManager) { 
      View view = super.findSnapView(layoutManager); 

      if (view != null) { 
       final int newPosition = layoutManager.getPosition(view); 

       if (newPosition != selectedPosition && recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE) { 
        onViewSnapped(newPosition); 
        selectedPosition = newPosition; 
       } 

      } 

      return view; 
     } 
    }; 

    ... 
} 

private void onViewSnapped(int index) { 
    // YOUR CODE HERE 
} 
관련 문제