【问题标题】:Up navigation with RecycleView使用 RecycleView 向上导航
【发布时间】:2017-10-23 19:09:03
【问题描述】:

我想就如何解决我正在尝试解决的 Android 向上导航问题询问您的意见。 我有一个带有 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 关于向上导航的内容,但找不到答案...

【问题讨论】:

    标签: android android-scrollview up-navigation


    【解决方案1】:

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

    【讨论】:

    • 这正是我想要的,非常感谢! :)
    【解决方案2】:

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

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

    【讨论】:

    • 如何恢复列表项?他们总是在那里吗?在我的情况下,我从 API 中以 20 个项目的形式获取它们,因此如果用户滚动到项目编号 500,当用户向上导航时,我必须获取 500 + 20 个项目...
    • Recycler View 应该将它们从给定的顶部位置恢复到活动中显示的最后一个项目。
    • 我已将另一个回复标记为解决方案,因为看起来按下后会完全恢复列表,而无需计算位置。到目前为止它可以工作,需要在不同的设备上进行测试..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多