滚动到顶部,然后返回到Recyclerview中按下的“返回”按钮

时间:2018-06-28 04:56:58

标签: android android-recyclerview

我有一个。当用户按回时,我希望recyclerview滚动到顶部。再次,如果用户单击“后退”按钮,则转到上一个活动。

  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (Integer.parseInt(android.os.Build.VERSION.SDK) > 5
            && keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
    //    if(recyclerview == onFirstPosition){
    //      goBack; }
        onBackPressed();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}


@Override
public void onBackPressed() {
    RecyclerView.SmoothScroller smoothScroller = new 
LinearSmoothScroller(getApplicationContext()) {
        @Override protected int getVerticalSnapPreference() {
            return LinearSmoothScroller.SNAP_TO_START;
        }
    };
    smoothScroller.setTargetPosition(0);
    LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView
            .getLayoutManager();
    layoutManager.startSmoothScroll(smoothScroller);
}

现在,我可以使用此代码滚动到顶部,但是如果用户位于第一项上,则不知道如何返回。

2 个答案:

答案 0 :(得分:3)

  

第一种方式

您可以使用boolean标志,如下例所示

采用一个boolean isFirstTime=true;变量

尝试一下

@Override
    public void onBackPressed() {

        if(isFirstTime){
            recyclerView.smoothScrollToPosition(0);
            isFirstTime=false;
        }else {
            super.onBackPressed();
        }
    }
  

第二种方式

使用 LinearLayoutManager 检查屏幕上的可见项目是否为第一项

示例

@Override
    public void onBackPressed() {

        LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView
                .getLayoutManager();
        if(layoutManager.findFirstCompletelyVisibleItemPosition()==0){
            super.onBackPressed();
        }else {
            recyclerView.smoothScrollToPosition(0);
        }
    }

答案 1 :(得分:1)

尝试使用以下代码...

@Override
public void onBackPressed() {

    if(layoutManager.findFirstCompletelyVisibleItemPosition()==0) {
        super.onBackPressed();           
    }else {
        layoutManager.scrollToPositionWithOffset(0, 0);
    }
}