2017-04-12 49 views
0

我用標準方式設置了SnapHelper的回收站。這工作正常。不過,我需要在項目被「捕捉」到位時得到通知,以便我可以使用該索引更新TextView。我試着在recyclerView上設置setOnFlingListener,但是snapHelper已經設置了它的一個實例,所以拋出異常。如何通過SnapHelper將RecyclerView項目捕獲到位時通知何時以及哪個項目被通知?

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); 
    layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false); 
    recyclerView.setLayoutManager(layoutManager); 
    adapter = new PlantAdapter(this, Globals.getPlants()); 
    recyclerView.setAdapter(adapter); 
    snapHelper = new snapHelper(this); 
    snapHelper.attachToRecyclerView(recyclerView); 

是否有另一種方法可以準確知道項目何時被捕獲以及哪個項目被捕獲?

回答

0

我已經想通了。我將一個onScrollListener添加到recyclerview,然後在滾動狀態爲SCROLL_STATE_IDLE時獲取onScrollStateChanged中的位置。

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
      if(newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { 
       View centerView = snapHelper.findSnapView(layoutManager); 
       if (centerView != null) { 
        int pos = layoutManager.getPosition(centerView); 
        updateAdapterPosition(pos); 
       } 
       else { 
        updateAdapterPosition(markers.size() - 1); 
       } 
      } 
     } 
    });