java - 如何在 BottomNavigationView 中的项目上设置长按监听器?

标签 java android bottomnavigationview

正如标题所说,我有一个包含 3 个菜单项的 BottomNavigationView,我想为每个菜单项分配一个长按监听器。
我在 BottoNavigationView 上设置了一个 OnNavigationItemSelectedListener

我试过这个答案 here 但这对我没有用...

大家还有什么推荐的方法吗?

这就是我所拥有的...顺便说一句,正常点击工作正常

private void setUpNavigationListeners() {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.add(R.id.fragment_container, new CalendarView()).commit();
    navigation.setOnNavigationItemSelectedListener(
            new BottomNavigationView.OnNavigationItemSelectedListener() {

                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) {

                    Fragment fragment;
                    switch (item.getItemId()) {
                        case R.id.navigation_courses:
                            subtitle.setText(R.string.courses);
                            fragment = new CalendarView();
                            break;
                        case R.id.navigation_assignments:
                            subtitle.setText(R.string.assignments);
                            fragment = new AssignmentView();
                            break;
                        case R.id.navigation_professors:
                            subtitle.setText(R.string.professors);
                            return false;
                        default:
                            return false;
                    }

                    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                    ft.replace(R.id.fragment_container, fragment).commit();
                    return true;
                }

            });
    navigation.setItemIconTintList(null);

    Menu menu = navigation.getMenu();
    MenuItem courses = menu.findItem(R.id.navigation_courses);
    MenuItem assignments = menu.findItem(R.id.navigation_assignments);
    MenuItem prof = menu.findItem(R.id.navigation_professors);

    courses.setActionView(new ImageButton(this));
    courses.getActionView().setLongClickable(true);
    Log.d("Manage", "Is long clickable:" + courses.getActionView().isLongClickable());
    courses.getActionView().setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            Log.d("Manage", "Long clicked");
            return true;
        }
    });

}

最佳答案

有两种方法可以解决这个问题。

  1. 通过 findViewById(int id);

    bottomNavigationView.findViewById(R.id.action_home).setOnLongClickListener(new View.OnLongClickListener() { @覆盖 public boolean onLongClick(View v) { 返回真; } });

  2. 通过'menuView';

    private void overrideOnMenuItemLongClickListener(BottomNavigationView bottomNavigationView){
    
    if(bottomNavigationView == null){
        return;
    }
    
    int count = bottomNavigationView.getChildCount();
    if(count <= 0){
        return;
    }
    
    ViewGroup menuView = (ViewGroup) bottomNavigationView.getChildAt(0);
    if(menuView == null){
        return;
    }
    
    int menuItemViewSize = menuView.getChildCount();
    if(menuItemViewSize <= 0){
        return;
    }
    
    for(int i=0; i < menuItemViewSize; i++){
        menuView.getChildAt(i).setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                return true;
            }
        });
    }
    

关于java - 如何在 BottomNavigationView 中的项目上设置长按监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43860097/

相关文章:

Android 应用甚至无法在 redmi note3 miui 中启动

java - 如何使用 BottomNavigationView 隐藏 TabLayout

android - 如何将tablayout与底部导航和viewpager一起使用?

routes - BottomNavigationBar保存偏移位置并导航到细节 flutter

java - 将对象值列表转换为 POJO

java - 关于 android onCreate()c 中数据库 Activity 的问题

java - 通过方法调用增加变量值

Java 和内存泄漏

java - 在 for 循环中从 ResourceIDs 获取 View

java - com.google.android.material.bottomnavigation.BottomNavigationView 不显示任何内容