老代还年轻 2021-09-21 20:19 采纳率: 0%
浏览 31

关于android navigation的相关问题

是这样,我想做一个和网易云和qq类似的抽屉+底部导航。因为刚学android没几天,也不知道现在的安卓app都是一套什么方式。我是将android提供的模板进行改造,现在/%ra2就是返回键的问题没有解决。

先说下我的实现方式吧,这个是主界面

img

然后点击侧边栏菜单导航到新的activity,然后新的activity有一套自己的navigation。切换activity的时候根据点击的菜单选项传递相应的fragmentId(navigation.xml中的id),然后导航过去后就使用avController.navigate(id)导航到指定的页面,现在有一个问题就是navigation有一个初始目的地,我这样切换会先跳转到初始目的地然后再挑战到最终的fragment。这样我点击返回bar时就要点两下,包括返回键也一样。不过back键可以重写直接返回上一个activity,但是bar设置相同的模式却还是需要点两下才能返回主界面。这个要怎么做呢?

img

img

//主activity,监听进行跳转
 NavigationView navigationView = findViewById(R.id.nav_view_left);
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                Intent intent = new Intent(MainActivity.this,MainActivity2.class);
                switch (item.getItemId()){
                    case R.id.nav_news:
                        intent.putExtra("id",R.id.newsFragment);
                        break;
                    case R.id.nav_gallery:

                        intent.putExtra("id",R.id.galleryFragment);
                        break;
                    case R.id.nav_slideshow:

                        intent.putExtra("id",R.id.slideshowFragment);
                        break;


                }
                startActivityForResult(intent,3);
                return false;
            }
        });

跳转的activity

public class MainActivity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentContainerView2);
        NavController navController = navHostFragment.getNavController();
        AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder()
                .setFallbackOnNavigateUpListener(this::onSupportNavigateUp).build();
        Toolbar toolbar = findViewById(R.id.toolbar);
        NavigationUI.setupWithNavController(toolbar,navController,appBarConfiguration);

        int id = getIntent().getIntExtra("id", R.id.newsFragment);
        navController.navigate(id);
    }

    @Override
    public boolean onSupportNavigateUp() {
        Intent intent = new Intent();
        setResult(RESULT_OK,intent);
        finish();
        return true;
    }

    @Override
    public void onBackPressed() {

        Intent intent = new Intent();
        setResult(RESULT_OK,intent);
        finish();
    }
}

然后我想问一下目前的androidApp都是怎么安排的啊,是单Activity+多fragment还是多activity+多fragment呢?我看有人说谷歌官方推荐是前者,但我在官网最佳做法没找到,不知道这两个方式哪种好呢?

  • 写回答

1条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 创建了问题 9月21日

      悬赏问题

      • ¥15 求助大佬:如何解决char类型多维数组的多次输入问题?
      • ¥30 这个数学公式是什么意思?
      • ¥15 求助!求助!被困扰一下午了
      • ¥15 为什么我的虚拟机断开与主机连接的键是灰色的点不了的
      • ¥15 python 分组计算百分比问题
      • ¥45 关于overflow ,final ALU
      • ¥15 ckeditor工具栏自定义样式
      • ¥15 silvaco 器件仿真的问题
      • ¥20 用c语言设计程序:给定一个从{a,b,c}到其自身的函数f={(a,a),(b,c),(c,b)},判断函数f是否有反函数?
      • ¥15 编写java程序查找回文字符串