使用RecycleView向上导航



我想询问您对我试图解决的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并返回,但我不确定这是否是最佳解决方案。。有没有更好、更优雅、更原生的解决方案来保存滚动项目和滚动位置?我已经阅读了关于Up导航的Android文档,但找不到答案。。。

如果按下"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);
}

对于我的列表,这是我保存索引的方式,也是我在该索引(顶部)恢复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(堆栈溢出)

保留已加载项目的子列表对你的应用程序来说太重了。。。

相关内容

  • 没有找到相关文章

最新更新