请有人帮我处理导航抽屉中的碎片,由于某些原因我无法让他们工作,所有代码看起来都正确。
Here是源代码的链接。
答案 0 :(得分:10)
使用此代码:
navigationView = (NavigationView) findViewById(R.id.navigationView);
navigationView.bringToFront();
答案 1 :(得分:6)
查看您的MainActivity.java
。
您已在NavigationView.OnNavigationItemSelectedListener
中实施了MainActivity
的回调,如下所示,
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
// blah blah
}
同时检查setupDrawerContent
方法。
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setChecked(true);
drawerLayout.closeDrawers();
return true;
}
});
}
在此方法中,您将创建一个本地OnNavigationItemSelectedListener
。
因此,您没有使用OnNavigationItemSelectedListener
中已覆盖的MainActivity
。
解决方案是使用this
作为setNavigationItemSelectedListener
的参数。通过这样做,您的所有点击都将转到onNavigationItemSelected
的{{1}},而不是转到本地MainActivity
。
onNavigationItemSelected
同时将本地private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(this);
}
中的代码移至onNavigationItemSelected
的{{1}}。
所以你的onNavigationItemSelected
会是这样的,
MainActivity
同时更改onNavigationItemSelected
,如下所示,以解决导航抽屉中的多项选择问题,
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
// Handle navigation view item clicks here.
int id = menuItem.getItemId();
menuItem.setChecked(true);
drawerLayout.closeDrawers();
if (id == R.id.nav_home) {
// Handle the home action
Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();
} else if (id == R.id.nav_the_wetlands) {
Toast.makeText(this, "The Wetlands", Toast.LENGTH_SHORT).show();
TheWetlandsFragment theWetlandsFragment = new TheWetlandsFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.relativelayout_for_fragment, theWetlandsFragment, theWetlandsFragment.getTag()).commit();
} else if (id == R.id.nav_the_mistbelt_forests) {
Toast.makeText(this, "The Mistbelt Forests", Toast.LENGTH_SHORT).show();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
祝你好运。
答案 2 :(得分:3)
不使用
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_SHORT).show();
return false;
}
});
代替它执行此操作
ArrayDeque
答案 3 :(得分:2)
一段时间后我也面临同样的问题,最后我意识到我没有写下面代码的第二行
navigationView = (NavigationView) findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(this);
你确保你写的相同,否则你的听众将无法工作
答案 4 :(得分:0)
确保已实现接口NavigationView.OnNavigationItemSelectedListener。 第二点,请确保添加这些行,否则listnere将不会被调用。
navigationView=(NavigationView) findviewbyid(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(this);
答案 5 :(得分:0)
添加这一行
导航视图.bringToFront();
它对我有用
答案 6 :(得分:0)
使用此代码:
NavigationView navigationView = findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this);
答案 7 :(得分:-1)
就我而言,我忘记了初始化导航菜单。
请遵循以下代码:
public void initSideMenu() {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
快乐的编码...