2016-03-20 2 views
0

このスレッドを読む貴重な時間をいただきありがとうございます。 私は、recyclerviewのアイテム内にrecyclerviewがあるところにアンドロイドアプリを開発しています。スクロールでrecyclerviewのトップアイテムを取得する方法

recyclerview(parent recyclerview)が親の最初のアイテムの上の位置に達するとき(つまり、最初のアイテムの上の位置が完全に見える場合)に、何らかのタスクを実行したいと思います。

私はこれまでのところ、これを試してみたが、それは、私はあなたが必要なものをアーカイブすることができ、これらの方法の2つの組み合わせを使用することにより

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
      super.onScrollStateChanged(recyclerView, newState); 
     } 

     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 
      LinearLayoutManager linearLayoutManager1 = (LinearLayoutManager) recyclerView.getLayoutManager(); 
      int displayedPosition = linearLayoutManager1.findFirstCompletelyVisibleItemPosition(); 

      if(displayedPosition==0){ 
      //Is this the place where top position of first item is reached ? 

       ((ControllableAppBarLayout) getActivity().findViewById(R.id.app_bar_layout)).expandToolbar(true); 
      } 


     } 
    }); 
+0

のinstanceofチェックコードが正しく見えます。あなたはそれをテストしましたか?ちなみに、 'dy == 0'ならテストしないのはなぜですか?それはあなたに同じ結果を与えるでしょう。 – Shai

+0

私はログを印刷しましたが、印刷されたログを見ることはできません:( –

+0

このコードは単純なrecyclerviewのためにうまくいきますが、入れ子にされたrecylerviewでは機能しません。 –

答えて

0

を必要とするもの望ましい結果を与えていません。 OPの質問のコードスニペットから

if (linearLayoutManager1.findFirstVisibleItemPosition() == 0 
    && linearLayoutManager1.findFirstCompletelyVisibleItemPosition() == 0) { 

    // reach first fully visible item. 

} 

..

  1. がlinearLayoutManager1に対してもClassCastExceptionの用心
  2. ヌルをチェックし、linearLayoutManager1ためにNullPointerExceptionの用心、
関連する問題