fishzhazha 2020-03-07 23:11 采纳率: 0%
浏览 154

为什么fragment commit以后就无法进行切换?以致于连item的监听都没执行

private void SwitchFra(Fragment fr){

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
//如果要切换的fragment没有添加则添加
    if(!fr.isAdded()){
        ft.add(R.id.dl_cebian,fr);

//如果要被切换的fragment不是空的,则隐藏
        if (lastFra != null) {
            ft.hide(lastFra);
        }
    } else {        //否则隐藏上一个fragment,显示要切换的fragment
        ft.hide(lastFra)
            .show(fr);
    }
    lastFra = fr;
    //提交
    ft.commit();
}

//监听
navCehua.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                switch (menuItem.getItemId()) {
                    case R.id.it_Upload:
                        tvTitle.setText("上传错题");
                        SwitchFra(fr_u);
                        Toast.makeText(MainActivity.this,menuItem.getTitle().toString(),Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.it_Calendar:
                        tvTitle.setText("考试月历");
                        SwitchFra(fr_c);
                        break;
                    case R.id.it_Text:
                        tvTitle.setText("错题测试");
                        SwitchFra(fr_t);
                        Toast.makeText(MainActivity.this,menuItem.getTitle().toString(),Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.it_Analyse:
                        tvTitle.setText("图谱分析");

                        SwitchFra(fr_a);

                        break;
                }
                //  Toast.makeText(MainActivity.this,"只执行",Toast.LENGTH_SHORT).show();

                DrawerLayout drawer = (DrawerLayout)findViewById(R.id.dl_cebian);
                drawer.closeDrawer(GravityCompat.START);
                return true;
            }
        });}```
  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-07-25 18:43
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    解答: 这段代码是一个用于切换Fragment的方法SwitchFra,并在NavigationView的监听器中调用了该方法来实现不同菜单项对应不同的Fragment切换。让我们来逐步解释这段代码的功能和逻辑:
    1. SwitchFra(Fragment fr)方法:
      • 这个方法接受一个Fragment对象作为参数,表示要切换的目标Fragment。
      • 首先获取FragmentTransaction对象,并通过getSupportFragmentManager()方法获取当前Activity的FragmentManager来开始Fragment事务。
      • 判断目标Fragment是否已经添加到Activity中,如果没有添加,则使用ft.add()方法将其添加到指定位置。
      • 如果要切换的Fragment不是空的,则隐藏上一个Fragment(lastFra)。
      • 如果要切换的Fragment已经添加过,则隐藏上一个Fragment,显示要切换的Fragment。
      • 最后将lastFra更新为当前要切换的Fragment,并提交事务。
    2. onNavigationItemSelected方法:
      • 在NavigationView的菜单项选中事件中,根据选中的MenuItem的ID执行相应的操作。
      • 根据不同菜单项的ID,设置不同的标题(tvTitle.setText())并调用SwitchFra方法切换到相应的Fragment。
      • 在某些情况下,会显示Toast提示当前选择的菜单项的标题。
      • 最后关闭侧边栏DrawerLayout。 示例代码中的SwitchFra方法和NavigationView的菜单监听器的逻辑可以有效地实现根据不同菜单项切换不同的Fragment,并更新相应的标题。在这个例子中,根据不同的菜单项选择,分别切换到不同的Fragment,并更新标题显示在顶部。
    评论

报告相同问题?

悬赏问题

  • ¥15 Hadoop的部署与安装的一些疑问
  • ¥15 短剧的sdk在哪里接入
  • ¥30 智能割草机自动化割草
  • ¥15 求:可不可以提供一些 在国内可以用,低代码不要太难 在电脑上可以下载的 制作app的软件
  • ¥60 找人回答kibana8.14.3二次集成开发,自定义插件ui导航栏如何设置
  • ¥15 fluke高精度万用表8845A型号测交流电压一直跳动,且去掉输入后显示不归零
  • ¥15 不同模型怎么用同一个shader
  • ¥15 安卓启动没有ais proxy与v4l2的log打印
  • ¥15 go怎么读取mdb文件里面的数据
  • ¥60 Matlab联合CRUISE仿真编译dll文件报错