Navigation Drawer无法跳转至Activity问题求助
嘿,刚入门Android遇到这种问题很正常,我帮你一步步排查解决:
核心问题:你的onNavigationItemSelected方法没被绑定到NavigationView上
方法出现灰色下划线提示“未被使用”,说明系统根本不知道这个方法是NavigationView的点击回调——你只是写了这个方法,但没告诉NavigationView要调用它。
步骤1:让你的Activity实现导航监听接口
首先修改goals类的声明,让它实现NavigationView.OnNavigationItemSelectedListener接口,这样系统才会把它当作导航项的点击处理器:
public class goals extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { // 你的其他代码(比如onCreate方法)放在这里 }
步骤2:给NavigationView添加ID并绑定监听器
首先打开你的goals活动XML布局,给NavigationView添加一个唯一ID(你现在的布局里没加,导致无法在代码中获取它):
<android.support.design.widget.NavigationView android:id="@+id/nav_view" <!-- 加上这行 --> android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:background="#414E68" app:itemIconTint="#FFFFFF" app:headerLayout="@layout/header_profile" app:itemTextColor="@android:color/background_light" app:menu="@menu/drawermenu"> </android.support.design.widget.NavigationView>
然后在goals的onCreate方法里,获取NavigationView实例并设置点击监听器:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_goals_layout_name); // 替换成你的布局文件名,比如R.layout.goals // 获取NavigationView实例 NavigationView navView = findViewById(R.id.nav_view); // 绑定监听器,this就是当前Activity(因为我们实现了接口) navView.setNavigationItemSelectedListener(this); }
步骤3:给回调方法加上@Override注解
确保你的onNavigationItemSelected方法是重写接口的方法,加上@Override注解(这样IDE能帮你检查方法签名是否正确):
@Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); switch (id) { case R.id.Daily: Intent h = new Intent(goals.this, Daily.class); startActivity(h); break; // 可以在这里添加其他导航项的case } // Close navigation drawer DrawerLayout drawer = findViewById(R.id.drawerLayout); drawer.closeDrawer(GravityCompat.START); return true; }
额外检查点(避免其他坑)
- 检查Activity注册:确保
DailyActivity已经在AndroidManifest.xml里注册了,不然跳转时会崩溃:<activity android:name=".Daily" /> - 菜单项ID匹配:确认
drawermenu.xml里的Daily项ID是@+id/Daily,和你代码里的R.id.Daily完全一致(大小写也要注意!) - DrawerLayout结构正确:你的布局里把
NavigationView放在了主内容布局前面,这是错误的!DrawerLayout要求第一个子View是主内容区域,第二个才是侧边栏,所以要调换顺序:<android.support.v4.widget.DrawerLayout ...> <!-- 主内容区域(必须是第一个子View) --> <android.support.constraint.ConstraintLayout ...> <!-- 你的主内容控件 --> </android.support.constraint.ConstraintLayout> <!-- 侧边栏NavigationView --> <android.support.design.widget.NavigationView ...> </android.support.design.widget.NavigationView> </android.support.v4.widget.DrawerLayout>
做完这些步骤,再运行App试试,点击抽屉里的Daily选项应该就能正常跳转到Daily Activity啦!
内容的提问来源于stack exchange,提问作者Matthew Mitchell
相关产品推荐
相关产品推荐

