You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中BottomNavigationView按钮跳转页面失效问题求助

解决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; // 循环回到第一个任务
        }
    }
}

额外小建议

  1. 给变量命名尽量遵循驼峰命名法,比如MissaoDia改成missaoDia,这样更符合Java的编码规范
  2. 在TrocarMissao方法里加的数组下标判断,能防止x超过数组长度导致崩溃,新手写代码时可以多注意这类边界情况

内容的提问来源于stack exchange,提问作者Leo Heise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:54:50