使用RecycleView进行导航

时间:2017-10-23 19:09:03

标签: android android-scrollview up-navigation

我想询问您对我尝试解决的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关于向上导航,但无法找到答案......

2 个答案:

答案 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)

保留已加载项目的子列表对您的应用来说太重了......