我有一个recyclerveiw。当用户按回时,我希望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);
}
现在,我可以使用此代码滚动到顶部,但是如果用户位于第一项上,则不知道如何返回。
答案 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);
}
}