【问题标题】:Scroll particular menuItem to top in navigationView when onDrawerOpened() called调用 onDrawerOpened() 时,将特定 menuItem 滚动到 navigationView 顶部
【发布时间】:2015-11-12 20:16:20
【问题描述】:

我在 DrawerLayout 中使用 NavigationView (android.support.design.widget.NavigationView)。我想知道当用户打开抽屉时是否有任何方式以编程方式滚动特定项目。 (而 onDrawerOpened() 在活动中调用)

例如,当用户打开抽屉时,我希望 MenuItem "action_feedback" 在 DrawerLayout 的顶部(滚动到顶部)。

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
    <item
        android:id="@+id/action_current_list"
        android:checked="true"
        android:icon="@drawable/ic_current_list"
        android:title="@string/current_list" />
    <item
        android:id="@+id/action_manage_lists"
        android:icon="@drawable/ic_my_lists"
        android:title="@string/my_lists" />
    <item
        android:id="@+id/action_search_products"
        android:icon="@drawable/ic_search_black_24dp"
        android:title="@string/search_products" />
    <item
        android:id="@+id/action_deals"
        android:icon="@drawable/ic_product_promo"
        android:title="@string/deals" />
</group>
<group android:id="@+id/nav_footer"
        android:checkableBehavior="single">
    <item
        android:id="@+id/action_feedback"
        android:icon="@drawable/ic_feeback"
        android:title="@string/feedback" />
    <item
        android:id="@+id/action_sign_out"
        android:icon="@drawable/ic_sign_out"
        android:title="@string/sign_out" />
</group>

之前我在 DrawerLayout 中有自定义布局(ScrollView + ListView),并且可以使用 scrollView.scrollTo(x,y)

提前致谢。

【问题讨论】:

    标签: android navigationview android-navigationview


    【解决方案1】:
    private NavigationView vNavigation;
    
    // ...
    
    @Override
    public void onDrawerOpened(View drawerView)
    {
        RecyclerView recyclerView = (RecyclerView)vNavigation.getChildAt(0);
        LinearLayoutManager layoutManager = (LinearLayoutManager)recyclerView.getLayoutManager();
        layoutManager.scrollToPositionWithOffset(4, 0);
    }
    

    【讨论】:

    • 感谢您的提醒。我曾尝试过这种方式,但没有将元素滚动到顶部。我需要刷新回收站视图数据吗?我试过 recycleView.getAepter().notifyStateChanged(),但没有运气!!
    • 更新了我的答案。以前的答案有效,但它要求您的项目根本不可见。当前的方法就像使用 ListView 滚动一样工作 - 这可能是您所期望的。
    • 如果你喜欢保持东西 .. 平滑 .. 而不是 layoutManager.scrollToPositionWithOffset(4, 0);尝试 RecyclerView.SmoothScroller smoothScroller = new LinearSmoothScroller(context) { @Override protected int getVerticalSnapPreference() { return LinearSmoothScroller.SNAP_TO_START; } }; smoothScroller.setTargetPosition(位置); layoutManager.startSmoothScroll(smoothScroller);
    猜你喜欢
    • 1970-01-01
    • 2022-08-16
    • 2014-08-29
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2017-11-16
    相关资源
    最近更新 更多