关于android的一点小问题

发布于 2022-09-30 23:06:57 字数 3040 浏览 28 评论 0

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

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

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

 title=

 title=

//主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呢?我看有人说谷歌官方推荐是前者,但我在官网最佳做法没找到,不知道这两个方式哪种好呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

口干舌燥 2022-10-07 23:06:57

官方编写了很详尽的文档,详见:导航组件App Navigation

NavigationViewBottomNavigationView的使用指南见:
使用 NavigationUI 更新界面组件(Update UI components with NavigationUI )

再说Single ActivityMultiple Activity的选择问题,根据实际情况选择吧。很多人拆分App页面可能是这样的:

  1. 闪屏页面使用一个Acitivtiy
  2. 注册登录页面又分别使用一个Acitivtiy,e.g.SignInActivitySignUpActivity
  3. 主页面再单独使用一个Acitivtiy,但是以Single Activity形式管理其功能页面。

p.s.可以上github上找找大牛们写的MVVM框架&Demo。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文