正如标题所说,我有一个包含 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;
}
});
}
最佳答案
有两种方法可以解决这个问题。
通过 findViewById(int id);
bottomNavigationView.findViewById(R.id.action_home).setOnLongClickListener(new View.OnLongClickListener() { @覆盖 public boolean onLongClick(View v) { 返回真; } });
通过'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/