我想询问您对我尝试解决的Android Up导航解决问题的方法的看法。 我有一个带有RecycleView的活动(MainActivity),显示了一个可滚动的项目列表,从API中获取。每个项目都有一个onclick监听器,用于打开项目详细信息活动,如下所示:
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("item", item);
context.startActivity(intent);
DetailActivity具有向上按钮,用户可以在其中返回上一个活动。以下是此活动的清单:
<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>
问题在于:当我导航到父活动时,滚动列表会重置并位于顶部。如果我使用设备上的后退按钮,则会保留列表并保留滚动位置,但是当我单击“向上”按钮时则不会...
我意识到为了恢复滚动列表,我必须将已经加载的项目列表保存在某处,也许可以将其传递给DetailActivity并返回,但我不确定这是最好的解.. 是否有更好,更优雅和原生的解决方案来保存滚动项目和滚动位置?我已阅读Android documentation关于向上导航,但无法找到答案......
答案 0 :(得分:4)
如果你的应用程序按“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);
}
答案 1 :(得分:0)
对于我的列表,这是我保存索引的方式以及我在该索引处恢复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);
credit:ian(Stack Overflow)
保留已加载项目的子列表对您的应用来说太重了......