关于android的一点小问题

重拾
  • 33

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

回复
阅读 728
1 个回答
𝒁𝒉𝒋𝒍37
  • 2k
官方编写了很详尽的文档,详见:导航组件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。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏