使用 RecyclerView 向上导航
Up navigation with RecycleView
我想就我正在尝试解决的 Android 向上导航问题的解决方法征询您的意见。
我有一个带有 RecycleView 的 activity (MainActivity),显示一个可滚动的项目列表,从 API 中获取。每个项目都有一个 onclick 侦听器,它会打开项目详细信息 activity,如下所示:
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("item", item);
context.startActivity(intent);
DetailActivity 有向上按钮,用户可以在此处return 到上一个activity。这是 activity:
的清单
<activity
android:name=".DetailActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.Base"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
问题是:当我导航到父级 activity 时,滚动列表被重置并位于顶部。如果我使用设备上的后退按钮,列表会保留并且滚动位置保持不变,但当我单击向上按钮时则不会...
我意识到,为了恢复滚动列表,我必须将已加载项目的列表保存在某处,也许将它传递给 DetailActivity 并返回,但我不确定这是最好的解决方案。 .
是否有更好、更优雅、更原生的解决方案来保留滚动项和滚动位置?我已通读 Android documentation 关于向上导航的内容,但找不到答案...
对于我的列表,这是我保存索引的方式以及在该索引(顶部)恢复 RecyclerView 的方式:
// save index and top position
int index = mList.getFirstVisiblePosition();
View v = mList.getChildAt(0);
int top = (v == null) ? 0 : (v.getTop() - mList.getPaddingTop());
// ...
// restore index and position
mList.setSelectionFromTop(index, top);
来源:ian(Stack Overflow)
保留已加载项的子列表对您的应用来说太重了...
如果按 "BACK" 对您的应用来说看起来不错,那么只需捕捉 "UP" 事件:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// simulate the "BACK" key
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
我想就我正在尝试解决的 Android 向上导航问题的解决方法征询您的意见。 我有一个带有 RecycleView 的 activity (MainActivity),显示一个可滚动的项目列表,从 API 中获取。每个项目都有一个 onclick 侦听器,它会打开项目详细信息 activity,如下所示:
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("item", item);
context.startActivity(intent);
DetailActivity 有向上按钮,用户可以在此处return 到上一个activity。这是 activity:
的清单<activity
android:name=".DetailActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.Base"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
问题是:当我导航到父级 activity 时,滚动列表被重置并位于顶部。如果我使用设备上的后退按钮,列表会保留并且滚动位置保持不变,但当我单击向上按钮时则不会...
我意识到,为了恢复滚动列表,我必须将已加载项目的列表保存在某处,也许将它传递给 DetailActivity 并返回,但我不确定这是最好的解决方案。 . 是否有更好、更优雅、更原生的解决方案来保留滚动项和滚动位置?我已通读 Android documentation 关于向上导航的内容,但找不到答案...
对于我的列表,这是我保存索引的方式以及在该索引(顶部)恢复 RecyclerView 的方式:
// save index and top position
int index = mList.getFirstVisiblePosition();
View v = mList.getChildAt(0);
int top = (v == null) ? 0 : (v.getTop() - mList.getPaddingTop());
// ...
// restore index and position
mList.setSelectionFromTop(index, top);
来源:ian(Stack Overflow)
保留已加载项的子列表对您的应用来说太重了...
如果按 "BACK" 对您的应用来说看起来不错,那么只需捕捉 "UP" 事件:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// simulate the "BACK" key
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}