Android Studio中BottomNavigationView按钮跳转页面失效问题求助
嘿,我看到你作为编程新手遇到了BottomNavigationView点击后不跳转页面的问题,别慌,咱们从代码里的两个关键问题入手来修复:
问题1:Activity生命周期方法调用顺序错误
在你的onCreate方法中,你先执行了setContentView,再调用super.onCreate——这完全搞反了!安卓要求super.onCreate(savedInstanceState)必须是onCreate方法里第一个执行的语句,它负责完成Activity的基础初始化工作,没有这一步,后续的视图控件监听等操作都会出现异常。
问题2:重复调用setContentView导致监听被覆盖
你在missaoTxt()方法里又调用了一次setContentView(R.layout.activity_main),这会重新加载整个布局页面。之前你给BottomNavigationView设置的点击监听是绑定在旧的布局实例上的,重新加载后,新的BottomNavigationView是一个完全全新的控件,没有任何监听绑定,所以点击自然没反应。
修复后的完整代码
我帮你调整了代码逻辑,把控件初始化统一放在onCreate里,去掉重复的setContentView,同时修正了生命周期方法的顺序:
public class MainActivity extends AppCompatActivity { TextView missao, missaoDia; Button change, done; int x = 0; int[] array = new int[]{R.string.m1, R.string.m2, R.string.m3, R.string.m4, R.string.m5, R.string.m6, R.string.m7}; @Override protected void onCreate(Bundle savedInstanceState) { // 必须先调用super.onCreate,再做其他操作 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 一次性初始化所有需要用到的控件 initViews(); BottomNavigationView bottomNavigationView = findViewById(R.id.navigation); bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.navigation_home: // 如果home页就是当前MainActivity,这里可以留空或者做刷新操作 break; case R.id.navigation_perfil: Intent intent = new Intent(MainActivity.this, perfil.class); startActivity(intent); break; case R.id.navigation_mais: Intent intent1 = new Intent(MainActivity.this, mais.class); startActivity(intent1); break; } return true; } }); // 初始化显示第一个任务 missao.setText(array[x]); } // 统一的控件初始化方法 private void initViews() { missao = findViewById(R.id.missao); missaoDia = findViewById(R.id.MissaoDia); change = findViewById(R.id.Change); done = findViewById(R.id.Done); } public void TrocarMissao(View view) { x = x + 1; // 这里直接更新文本即可,不需要重新加载布局 missao.setText(array[x]); // 额外建议:加个判断,避免x超出数组下标导致崩溃 if (x >= array.length - 1) { x = 0; // 循环回到第一个任务 } } }
额外小建议
- 给变量命名尽量遵循驼峰命名法,比如
MissaoDia改成missaoDia,这样更符合Java的编码规范 - 在
TrocarMissao方法里加的数组下标判断,能防止x超过数组长度导致崩溃,新手写代码时可以多注意这类边界情况
内容的提问来源于stack exchange,提问作者Leo Heise
相关产品推荐
相关产品推荐

