【问题标题】:How to open menu item on click on RecyclerView Row如何在单击 RecyclerView Row 时打开菜单项
【发布时间】:2019-04-21 21:04:51
【问题描述】:

我有一个带有 BottomNavigationView 的应用程序,它有 2 个菜单项。两者都有自己的Fragments。在Fragment 的第一项上,我有一个RecyclerView。我想在点击RecyclerView 行时打开第二个菜单项并发送一些参数。我应该如何以及在哪里做?

我现在在做什么: 在我在第一个菜单项上显示的Fragment 中,我有一个方法,我将它传递给RecyclerViewAdapter,以便每次点击一行时都可以触发它。但是我在listener as BottomNavActivity 中找不到任何方法来打开它的第二个菜单项

【问题讨论】:

    标签: android kotlin android-recyclerview bottomnavigationview


    【解决方案1】:

    您需要在适配器中引用您的活动。您可以在初始化期间使用

    SomeAdapter(var activity: Activity)
    

    然后在您的适配器内部,您使用以下操作设置 onClickListener

    activity?.navigation?.selectedItemId = R.id.navigation_id_here
    

    【讨论】:

    • 酷,这可行,但我无意将Activity 传递给AdapterselectedItemId = R.id.navigation_id_here 真的很有帮助,谢谢!
    • 没有问题,该活动将帮助您避免非可选视图。您还可以使用相同的模式将数据传递到您的适配器:)
    【解决方案2】:

    从 API 25.3.0 开始,它引入了 setSelectedItemId(int id) 方法,让您可以将项目标记为已选中,就好像它已被点击一样。

    来自文档:

    设置选中的菜单项 ID。这与点击 项目。

    代码示例:

    BottomNavigationView bottomNavigationView;
    bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavigationView);
    bottomNavigationView.setSelectedItemId(R.id.my_menu_item_id);
    

    对于那些仍在使用 SupportLibrary 的人

    View view = bottomNavigationView.findViewById(R.id.menu_action_item);
    view.performClick();
    

    【讨论】:

    • 谢谢,完美运行。我的问题是我没有区分BottomNavActivityBottomNavigationView。只是尝试在第一个而不是第二个中访问setSelectedItemId()。再次感谢!
    • 但是传递一些数据呢?有没有合适的方法来做到这一点?我现在只看到一种方法 - 创建一个单例,以便可以从两个选项卡访问它。但也许有更好的方法?我很感激一些建议,在此先感谢!
    • 这不处理可选项,很可能会崩溃。鉴于答案是在 Java 中,它应该包含在一个检查 != null 的 if 语句中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2019-03-05
    相关资源
    最近更新 更多