3

下面我有回收站视图中的片段,当向下滚动,该片段应消失,当向上滚动,该片段应重新出现使用动画只有一次上滚动

我实现它,但问题是,当我向下滚动很少,碎片消失的动画发生,当我进一步滚动时,它会重新出现,并且会出现向下滑动动画,但是我希望它会保持隐藏状态,直到下一个向上滚动。

这里是我的代码:

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

       Log.d("newstate",newState+""); 


      } 

      @Override 
      public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
       super.onScrolled(recyclerView, dx, dy); 
       Log.d("dx",dx+""); 
       Log.d("dy",dy+""); 

       FragmentTransaction ft1 = getFragmentManager().beginTransaction(); 
       ft1.setCustomAnimations(R.anim.entry, R.anim.exit); 
       ft1.show(bmfragment); 
       ft1.commit(); 
        visibleItemCount = recyclerView.getChildCount(); 
        totalItemCount = mLinearLayoutManager.getItemCount(); 
        firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition(); 


       if(dy<0) { 

         FragmentTransaction ft = getFragmentManager().beginTransaction(); 
         ft.setCustomAnimations(R.anim.entry, R.anim.exit); 
         ft.show(bmfragment); 
         ft.commit(); 


       }else if(firstVisibleItem>=1) 
       { 

         FragmentTransaction ft = getFragmentManager().beginTransaction(); 

         ft.setCustomAnimations(0, R.anim.exit); 
         ft.hide(bmfragment); 
         ft.commit(); 


       } 




      } 
     }); 

回答

0

我知道了!我刚刚使用了一个标志变量

@Override 
      public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
       super.onScrolled(recyclerView, dx, dy); 
       Log.d("dx",dx+""); 
       Log.d("dy",dy+""); 

       if(flag==false) { 
        FragmentTransaction ft1 = getFragmentManager().beginTransaction(); 
        ft1.setCustomAnimations(R.anim.entry, R.anim.exit); 
        ft1.show(bmfragment); 
        ft1.commit(); 
        visibleItemCount = recyclerView.getChildCount(); 
        totalItemCount = mLinearLayoutManager.getItemCount(); 
        firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition(); 
       } 


       if(dy<0) { 

         FragmentTransaction ft = getFragmentManager().beginTransaction(); 
         ft.setCustomAnimations(R.anim.entry, R.anim.exit); 
         ft.show(bmfragment); 
         ft.commit(); 
         flag = false; 

       }else if(firstVisibleItem>=1) 
       { 
        if(flag==false) { 

         FragmentTransaction ft = getFragmentManager().beginTransaction(); 

         ft.setCustomAnimations(0, R.anim.exit); 
         ft.hide(bmfragment); 
         ft.commit(); 
         flag=true; 
        } 


       } 
       Log.d("visibleItemCount",visibleItemCount+""); 
       Log.d("firstVisibleItem",firstVisibleItem+""); 




      } 
     });